我有以下关联设置:
class Image < ActiveRecord::Base
belongs_to :imageable, polymorphic: true
attr_accessible :photo
has_attached_file :photo, :styles => { :small_blog => "250x250#", :large_blog => "680x224#", :thumb => "95x95#" }
end
class Post < ActiveRecord::Base
has_many :images, as: :imageable
accepts_nested_attributes_for :images
attr_accessible :comments, :title, :images_attributes
end
例如,要在我的索引页面中访问帖子的图像,我会将我的代码放在一个块中并使用each
循环:
<% @posts.each do |p| %>
<% p.images.each do |i| %>
<%= image_tag(i.photo.url(:large_blog), :class => 'image') %>
<% end %>
<% end %>
所以当我在我的节目视图中访问该帖子时,我只访问一条记录,我认为我可以访问这样的图像:
<%= image_tag(@post.image.photo.url(:large_blog), :class => 'image') %>
但似乎我不能得到像以下那样的错误:未定义的方法'image'。
我没有想到这里真正基本的东西,并希望有人能指出我正确的方向。
答案 0 :(得分:1)
您在has_many
模型中与Image
有Post
的关系,因此您无法访问Post.image
,因为您每个模型只有一组图像帖子。用简单的英语:
你来到这里:
使用Post
方法迭代的@posts
(each
)集合
<% @posts.each do |p| %>
现在p
表示单个帖子,其中包含images
<% p.images.each do |i| %>
再次,您迭代images
并最终显示附加到image
的每个Post
<%= image_tag(i.photo.url(:large_blog), :class => 'image') %>
<% end %>
<% end %>
因此,您可以看到每个Post
可能包含多个图片,即使它只有一个图像,它仍然是一个数组,因此您只能通过@post.images.each
甚至{{{{}}访问它1}}(或@post.images.first
)如果你只想要第一个。
如果你真的想也能last
,你也应该添加到Post模型:
@post.image
您还可以添加其他条件(如上面的代码所示)以仅选择最新的照片等。您可以阅读更多相关信息here
答案 1 :(得分:0)
好的,以防万一其他人处于类似的情况,这就是我为了让它发挥作用所做的,除非有人有更好的选择
<% for image in @post.images %>
<a title=""><%= image_tag(image.photo.url(:large_blog), :class => 'image') %></a>
<% end %>