2013-02-01 89 views
0

這應該有點簡單,但似乎無法掌握關聯。兩個模型軌之間的關聯3

我正在使用nested_form和paperclip。我有一個名爲照片的模型來存儲所有圖像和後期模型。我正在嘗試顯示與相關帖子相關的照片,但在渲染視圖時會顯示「未定義的方法頭像」。

class Post < ActiveRecord::Base 
has_many :photos, :dependent => :destroy 
accepts_nested_attributes_for :photos 
attr_accessible :title, :comments, :photo_id, :avatar, :photos_attributes 
end 

Class Photo < ActiveRecord::Base 
belongs_to :post 
attr_accessible :avatar, :post_id 
has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100>" } 
end 

控制器

def new 
@post = Post.new 
@post.photos.build 
end 

,所以我的印象是,當一個崗位被建成了信息和照片模式之間的關聯是由?是對的嗎?

所以,當我把這個在視圖中我得到的未定義的方法,任何人都可以提醒我要去的地方錯了,請

<% @posts.each do |f| %> 
<ul> 
<li><%= f.title %></li> 
<li><%= f.department.name %></li> 
<li><%= image_tag f.avatar.url(:thumb) %></li> 
<li><%= link_to "Delete Post", post_path(f.id), :confirm => "Are you sure?", :method => :delete %></li> 
</ul> 
<% end %> 

我已經試過

<%= image_tag f.photo.avatar.url(:thumb) %> 

但是,這並不工作要麼

回答

2

可能是你正在創建照片錯誤。

在這裏你可以看到的表單外觀:Nested form using paperclip

而且還Posthas_many :photos,所以它必須是somth。像

<% @posts.each do |f| %> 
.... 


<% f.photos.each do |photo| %> 
    <%= image_tag photo.avatar.url(:thumb) %> 
<% end %> 


... 
<% end %> 
+0

謝謝,我想這是建立照片,因爲我改變了我的看法,照片到你的答案,f.photos.each。所以這是有效的,因爲照片嵌套在帖子內?感謝雖然所有工作,現在可以上傳多個圖像,並顯示他們的帖子相關 – Richlewis

+0

它的作品,因爲你的文章有很多照片。這意味着'''f.photos'''會返回一個'''Photo'''對象的數組。所以循環他們會告訴你圖像) – Bob

+0

優秀,感謝清除那 – Richlewis

0

我認爲在你的控制器中,你應該首先定義你正在關聯的post對象:

def new 
    @post = Post.find(params[:post_id] 
    @photo = @post.photos.build 

    .... 
    end 

同樣在PhotosControllercreate動作。

1

當我使用嵌套屬性時,我遵循三個步驟。首先,在父模型,你可以使用accepts_nested_attributes_for:

Class Post 
    has_many :photos, dependent: :destroy 
    accepts_nested_attributes_for :photos 
    attr_accessible :photos_attributes 
end 

其次,你可以將一個嵌套形式的照片,您可以設置照片的屬性,對於特定職位:

<%= form_for(@post) do |f| %> 
    <%= f.fields_for :photos do |p| %> 
    ...rest of form here... 

三,您可以通過後期模型中的新動作創建照片:

Class UserController 
    def new 
    @user = User.new(photos: Photo.new) 
    end 
end 

最後一步很重要。如果您不這樣做,則不會在用戶表單中看到照片字段。如果您按照這些步驟操作,則應該可以在用戶表單中設置來自照片和用戶的所有屬性。