0

我有以下关联设置:

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') %>

但似乎我不能,因为我收到如下错误:未定义的方法“图像”。

我没有在这里考虑一些真正基本的东西,并希望有人能指出我正确的方向。

4

2 回答 2

1

您在模型中有has_many关系,因此您无法访问,因为每个帖子只有一组图像。用简单的英语:ImagePostPost.image

你在这里:

使用方法迭代的Post( )集合@postseach

<% @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或什@post.images.first至(或last)访问它。

如果你真的想也能做到,@post.image你也应该添加到 Post 模型中:

class Post < ActiveRecord::Base
has_one :image, conditions: { primary: true} # if you want to specify main photo and of course only if you have  'primary' in Image model
(...)

您还可以添加其他条件(如上面的代码)以仅选择最新照片等。您可以在此处阅读有关它的更多信息

于 2013-08-09T13:32:01.623 回答
0

好的,以防万一其他人处于类似情况,这就是我为使其正常工作所做的工作,除非有人有更好的选择

<% for image in @post.images %>
  <a title=""><%= image_tag(image.photo.url(:large_blog), :class => 'image') %></a>
<% end %>
于 2013-08-09T13:03:44.020 回答