将form_for用于非属性值

时间:2012-07-20 07:30:28

标签: ruby-on-rails activerecord associations form-for

我有一个像这样的form_for:

<%= form_for(@post) do |f| %>

我想提交一个不属于模型属性的参数

<%= f.text_field :label%>

我有一个Label模型(标签has_many:posts和posts has_many:labels),在posts_controller的create动作中,我想根据标签text_field创建一个新的Label对象。通过上面的text_field,我得到了:

undefined method `label'for #<Object>

我怎样才能实现这个目标?

提前致谢!

2 个答案:

答案 0 :(得分:8)

如果您的属性不存在于数据库表中,并且仍然想要使用它,那么您已通过以下方式将该属性指定到模型中

attr_accessor :name, :email, :content

答案 1 :(得分:0)

您可以尝试使用fields_for方法创建关联对象。

<%= form_for(@post) do |f| %>
  <%= fields_for @post.labels do |label| %>
    <%= label.text_field :name %>
    <%= label.text_area :description %>
  <% end %>
<% end %>

显示在控制器中构建关联对象所需的默认标签数。

在你的帖子控制器中添加

def new
  @post = Post.new
  #To build 2 labels use
  2.times do
  @post.labels.build 
  end
end

要接受嵌套属性,请在Post模型中添加以下代码。

class Post < ActiveRecord::Base
  accepts_nested_attributes_for :labels
end

有人发布了这个然后删除了......