ruby on rails 3 - access associated record in view (show page) -
i have following association setup:
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
to access image post within index page, example, put code in block , loop through using each
:
<% @posts.each |p| %> <% p.images.each |i| %> <%= image_tag(i.photo.url(:large_blog), :class => 'image') %> <% end %> <% end %>
so when comes accessing post in show view accessing 1 record thought access image so:
<%= image_tag(@post.image.photo.url(:large_blog), :class => 'image') %>
but seems if can't error like: undefined method 'image'.
im not thinking basic here , hoping point me in right direction.
you have got has_many
relation image
in post
model, can't access post.image
you've got collection of images each post. in plain english:
you've got here:
a collection of post
(@posts
) iterate each
method
<% @posts.each |p| %>
now p
means single post has collection of images
<% p.images.each |i| %>
and again, iterate on images
, display every single image
attached post
<%= image_tag(i.photo.url(:large_blog), :class => 'image') %> <% end %> <% end %>
so can see every post
may have several images , if have 1 image still array, can access @post.images.each
or @post.images.first
(or last
) if want first one.
if want able @post.image
should add post model:
class post < activerecord::base has_one :image, conditions: { primary: true} # if want specify main photo , of course if have 'primary' in image model (...)
you can add additional conditions (as in code above) select newest photo, etc. can read more here
Comments
Post a Comment