父表单嵌套的Rails

时间:2012-05-17 18:18:33

标签: ruby-on-rails ruby ruby-on-rails-3

我有Subscription模型嵌套到User模型。

我正在尝试创建一个表单,以便在/subscriptions/new

下添加新订阅

此表单上显示的字段保存在父User模型中。

new行动中,我只是

@subscription = Subscription.new

问题是如何在订阅新form_for中添加此父User的字段?订阅表格不知何故是父母的嵌套。

1 个答案:

答案 0 :(得分:1)

如果您将用户和订阅模型中的代码包含在您的答案中,那将非常有用,这样我们就可以看到这些关系。根据您的评论,听起来您正在执行以下操作:

class User < ActiveRecord::Base
  has_many :subscriptions
  accepts_nested_attributes_for :subscription 
end

class Subscription < ActiveRecord::Base
  belongs_to :user
end

听起来您想要以相同的形式捕获用户和订阅的数据。为此,您必须使用嵌套表单上的fields_for来嵌套表单(请注意上面的accepts_nested_attributes_for

<%= form_for @user do |user_form|%> 
  <%= user_form.text_field :phone %>
  <%= user_form.fields_for :subscription @user.subscription.new do |subscription_form|%>
    <%= subscription_form.text_field :name %>
  <% end %>
<% end %>

然后,在控制器的create方法中,您只需调用:

@user = User.create(params[:user])

此代码未经过测试,我对您的设置做了很多假设,但希望这足以让您入门。有关详细信息,field_for上的文档位于:http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-fields_for