вопрос о полиморфной ассоциации - PullRequest
1 голос
/ 16 декабря 2010

Теперь я имею дело с файлом миниатюр видео.Я хочу использовать полиморфную ассоциацию:

class Picture < ActiveRecord::Base
  belongs_to :pictureable, :polymorphic => true
end


class Video < ActiveRecord::Base
  belongs_to :videoable, :polymorphic => true
  has_many :pictures, :as => :pictureable  # I want to use has_one :picture, :as => :picturealbe, it make sense to let each video have a single picture as thumbnail  but it doesn't work for me, video.picture return a nil
end

class Drummer < ActiveRecord::Base
  has_many :videos,:as => :videoable
  has_many :pictures, :as => :pictureable
end

и хочу использовать это для отображения всего видео с его миниатюрой

<% @drummer.videos.each do |v|%>
<li>
<%= link_to video_path(v) do %>
<%= image_tag(v.pictures.find(1).url) %>
<h4><%= v.title %></h4>
<h5><%= v.desc %></h5>
<h6>event place</h6>
<% end %>
</li>
<% end %>

Я получил эту ошибку в файле журнала разработки:

ActionView::Template::Error (Couldn't find Picture with ID=1 [WHERE ("pictures".pictureable_id = 3 AND "pictures".pictureable_type = 'Video')]):
    92: <% @drummer.videos.each do |v|%>
    93: <li>
    94: <%= link_to video_path(v) do %>
    95: <%= image_tag(v.pictures.find(1).url) %>
    96: <h4><%= v.title %></h4>
    97: <h5><%= v.desc %></h5>
    98: <h6>event place</h6>
  app/views/drummers/show.html.erb:95:in `block (2 levels) in _app_views_drummers_show_html_erb___754323413_3886850_892596806'
  app/views/drummers/show.html.erb:94:in `block in _app_views_drummers_show_html_erb___754323413_3886850_892596806'
  app/views/drummers/show.html.erb:92:in 

`_app_views_drummers_show_html_erb ___ 754323413_3886850_892596806 '

мое решение совсем не изящно, но я не могу придумать лучшую идею, ни одно предложение?спасибо всем

Ответы [ 2 ]

1 голос
/ 16 декабря 2010

Вы можете визуализировать тег изображения как

<%= image_tag(v.pictures.first.url) %>

Когда вы явно говорите v.pictures.find(1), он попытается найти изображение, которое связано с данным видео и имеет идентификатор 1, и иногда вы застреваете с ошибкой, когда такой записи не существует.

1 голос
/ 16 декабря 2010

Я тоже новичок в рельсах, но у меня недавно была похожая проблема ... Что-то вроде этого работало для меня:

class Video < ActiveRecord::Base
  belongs_to :videoable, :polymorphic => true
  has_one :picture, :foreign_key => :pictureable_id
end

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...