如何从其他对象中包含表单元素?

时间:2012-07-20 02:00:11

标签: ruby-on-rails ruby

我正在使用一个非常简单的论坛软件来帮助我在铁轨上弄湿红宝石。我想要做的是在用户创建新主题时为帖子内容添加文本区域,但每次我尝试在主题表单中添加它时,我都会收到以下错误:

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

这是我的帖子模型:

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

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

1 个答案:

答案 0 :(得分:3)

您可以使用fields_for帮助程序。请参阅此链接http://apidock.com/rails/ActionView/Helpers/FormHelper/fields_for。第一个参数可以是Post.new,然后您可以在该块中包含主题文本字段。最终结果是一个嵌套的表单,您可以在控制器中进行解析。