2011-09-02 36 views
5

Rails 3.1 kullanıyorum ve bir tartışma forumu üzerinde çalışıyorum. Her biri Post s olan Topic adında bir modelim var. Kullanıcı yeni bir konu oluşturduğunda, ilk Post'u da yapmalıdır. Ancak, bunu aynı şekilde nasıl yapabileceğimi bilmiyorum. İşte benim kodum:Rails 3.1'de aynı formda birden fazla model var mı?

<%= form_for @topic do |f| %> 
<p> 
    <%= f.label :title, "Title" %><br /> 
    <%= f.text_field :title %> 
</p> 

<%= f.fields_for :post do |ff| %> 
    <p> 
     <%= ff.label :body, "Body" %><br /> 
     <%= ff.text_area :body %> 
    </p> 
<% end %> 

<p> 
    <%= f.submit "Create Topic" %> 
</p> 
<% end %> 

class Topic < ActiveRecord::Base 
    has_many :posts, :dependent => :destroy 
    accepts_nested_attributes_for :posts 
    validates_presence_of :title 
end 


class Post < ActiveRecord::Base 
    belongs_to :topic 
    validates_presence_of :body 
end 

... ama bu çalışmıyor gibi görünüyor. Herhangi bir fikir?

Teşekkürler!

cevap

6

@ Pablo'nun cevabı, ihtiyacınız olan her şeye sahip gibi görünüyor. Ama Sonra Topic denetleyicisi bu

def new 
    @topic = Topic.new 
    @topic.posts.build 
end 

eklemek ...

İlk değişiklik bu

<%= f.fields_for :posts do |ff| %> # :posts instead of :post 

için

<%= f.fields_for :post do |ff| %> 

adresinin görünümünde bu çizgi daha belirgin olmak üzere Bu seni gitmeli.

+0

+1. – Joseph

3

sizin özel durum için Ryan Bates here ve here

gelen çok iyi bir açıklama: (: post), yerine bir dernek (: mesaj) Eğer fields_for çağırmak Bir modeli kullanıyor. Ayrıca, <%= ... %>'un doğru kullanımını da kontrol edin. Raylarda 3.x yapıdaki davranış değişti. Blok yardımcıları (form_for, fields_for, vs) buna gerek duymazlar ve satır içi yardımcılara (text_field, text_area, vb.) Ihtiyaç duyarlar.

+0

Bağlantı için teşekkürler, ancak soruma özel bir şey arıyordum. Gerçek örnek için – jasonbogd

İlgili konular