如何包含来自其他对象的表单元素?

问题描述:

我正在工作一个非常简单的论坛软件,以帮助我的脚在轨道上的红宝石湿。我所试图做的就是添加一个文本区域,帖子内容,当用户创建一个新的话题,但每次我试图在专题的形式将其添加,我得到以下错误:如何包含来自其他对象的表单元素?

NoMethodError in Topics#new 
Showing /Users/Ken/dev/forums/app/views/topics/_form.html.erb where line #11 raised: 
undefined method `merge' for :content:Symbol 

这里的我的新主题形式:

<%= form_for @topic do |f| %> 
    <%= f.error_messages %> 
    <% if params[:forum] %> 
    <%= f.hidden_field :forum_id, :value => params[:forum] %> 
    <% end %> 
    <p> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    </p> 
    <p> 
    <%= f.text_area :post, :content %> 
    </p> 
    <p><%= f.submit "Create" %></p> 
<% end %> 

这里是我的主题模式:

class Topic < ActiveRecord::Base 
    attr_accessible :name, :last_poster_id, :last_post_at 
    belongs_to :forum 
    has_many :posts, :dependent => :destroy 
end 

这里是我的Post模型:

class Post < ActiveRecord::Base 
    attr_accessible :content 
    belongs_to :topic 
end 

如何在主题表单中正确使用文本区域?我是否需要将其添加到主题模型才能访问它,如果有,我该怎么做?

您可以使用fields_for helper。看到这个链接,http://apidock.com/rails/ActionView/Helpers/FormHelper/fields_for。第一个参数可以是Post.new,然后可以在该块内部有主题文本字段。最终结果是可以在控制器中解析的嵌套表单。