我有一家公司有一个订阅。现在我想要一个表单来添加或编辑公司和订阅,所以我使用“accepts_nested_attributes_for”。这是公司模型的一部分:
has_one :subscription, :dependent => :destroy
accepts_nested_attributes_for :subscription
这是(部分)订阅模型:
belongs_to :company
在控制器中我有这个:
def new
@company = Company.new(:subscription => [Subscription.new])
end
def create
@company = Company.new(params[:company])
if @company.save
redirect_to root_path, notice: I18n.t(:message_company_created)
else
render :action => "new"
end
end
def edit
@company = Company.find(params[:id])
end
def update
@company = Company.find(params[:id])
if @company.update_attributes(params[:company])
redirect_to root_path, :notice => I18n.t(:message_company_updated)
else
render :action => "edit"
end
end
表格如下:
<%= f.fields_for(:subscription) do |s_form| %>
<div class="field">
<%= s_form.label I18n.t(:subscription_name) %>
<%= s_form.text_field :name %>
</div>
<% end %>
这给出了两个问题:
我在这里做错了什么?
我使用的是Rails版本3.1
答案 0 :(得分:2)
我认为您应该将新动作更改为:
def new
@company = Company.new
@company.build_subscription
end
有关详细信息,请参阅docs。然后,我认为您必须将subscription_attributes
添加到公司定义的attr_accessible列表中。