2011-09-02 74 views
5

我正在使用Rails 3.1并正在讨论论坛上工作。我有一个名为Topic的模型,每个模型都有很多Post s。当用户提出新话题时,他们也应该制作第一个Post。但是,我不知道我该如何以同样的形式做到这一点。这里是我的代码:Rails 3.1中的多个模型在相同的形式?

<%= 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 

...但这似乎并没有工作。有任何想法吗?

谢谢!

回答

6

@巴勃罗的答案似乎有你需要的一切。但更具体...

首先改变这条线在您看来,从

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

这个

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

然后在您的Topic控制器添加此

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

这应该让你去。

+0

+1为实例。 – Joseph

3

从瑞安贝茨herehere

很好的解释对于您的具体情况:您正在使用的模型(张贴),而不是关联:当你调用fields_for(职位)。

同时检查是否正确使用<%= ... %>。在rails 3.x中,构造的bahaviour改变了。块助手(form_for,fields_for等)不需要它,而内联助手(text_field,text_area等)确实需要它。

+0

感谢您的链接,但我一直在寻找特定于我的问题的东西。 – jasonbogd

相关问题