#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
объект. Чтобы исправить это, вам нужно передать экземпляр aClass 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. есть какие-нибудь предложения по этому поводу?