неопределенный метод `имя_модели’ для DisplayPhotoUploader: класс

#ruby-on-rails #ruby-on-rails-4 #carrierwave

#ruby-on-rails #ruby-on-rails-4 #carrierwave

Вопрос:

Я пытаюсь перебирать изображения для отображения в галерее, как показано ниже.

 <%= @venue.venue_photos.each do |photo| %>
          <div class="col-lg-3 col-md-6 col-sm-6">
            <div class="widget">
              <div class="thumbnail">
                <%= link_to(image_tag(photo.display_photo.url(:medium)), photo.display_photo, :class => 'thumb-zoom lightbox') %>
              </div>
            </div>
          </div>
          <% end %>
 

я получаю ошибку при попытке получить URL-адрес изображения из carrierwave в результате цикла.

 undefined method `model_name' for DisplayPhotoUploader:Class
 

Комментарии:

1. В какой строке появляется эта ошибка?

2. Эта ошибка будет вызвана попыткой Rails получить доступ к model_name атрибуту объекта данных. Проблема в том, что вы передаете не типичный объект Ruby, а голый Class объект. Чтобы исправить это, вам нужно передать экземпляр a Class Object , например @photo = Photo.first

3. @Pavan <%= link_to(image_tag(photo.display_photo.url(:средний)), photo.display_photo, :class => ‘лайтбокс с большим увеличением’) %>

4. @RichPeck должен ли я сделать это после выполнения if?

5. Нет, для меня это выглядит как проблема с CarrierWave — вы используете Carrierwave или Paperclip?

Ответ №1:

помощник link_to создает ссылку, то есть, anchor element <a href="..">..</a> используя переданные ему аргументы. Первый аргумент используется для отображения интерактивного текста / изображения, второй аргумент принимает набор options , который создает url (т.Е. href ), На который это <a> element будет ссылаться, а последний html_options принимает любые атрибуты html, связанные с <a> element .

В вашем случае вы правильно передали первый и третий аргументы, НО второй аргумент неверен photo.display_photo , не создаст никаких url , поскольку он просто получит атрибут с именем display_photo экземпляра photo . Это приводит к ошибке

undefined method 'model_name' for DisplayPhotoUploader:Class

Чтобы решить эту проблему, передайте действительный url , к которому вы хотите перенаправить при нажатии на изображение.

Запустите rake routes в командной строке, чтобы проверить список доступных маршрутов для вашего приложения.

 <%= link_to(image_tag(photo.display_photo.url(:medium)), photo.display_photo, :class => 'thumb-zoom lightbox') %>
####                                                     ^^^^^^^^^^^^^^^^^^^       
####                                                      Change this
 

Комментарии:

1. @Kriti Carrierwave автоматически выдает вам URL-адрес, когда вы выполняете Model.column, но здесь, поскольку я выполняю цикл, модель не была установлена. любая идея, как я могу передать URL-адрес изображения. поскольку это световой блок, ссылка на изображение, которое выбирается плагином для отображения всплывающего окна изображения

2. есть какие-нибудь предложения по этому поводу?