2010-12-16 2 views
1

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

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'

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

ответ

1

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

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

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

+0

Вау, это имеет смысл. благодаря – mko 2010-12-19 18:13:14

1

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

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

Надеется, что это помогает!

+0

Thanks.lainie Я попробую ваш код в ближайшее время :-) – mko 2010-12-19 18:12:49