如何将simple_fields_for与关联模型一起使用?

时间:2016-10-13 09:22:20

标签: ruby-on-rails

我有两个模型,Wines has_one :registerRegisters belong_to :wineregisters_controller.rb很简单,由rails generate scaffold生成。

我想在register对象的同时创建一个wine对象,并确保它们正确链接。因此,我试图以同样的形式这样做。

我正在使用simple_form_forsimple_fields_for我相信后者正在执行,但没有register的实例,因此表单不包含完成字段。

我认为相关的代码片段是:

来自wines_controller.rb

def new
  @wine = Wine.new
  @wine.register = Register.new
end
def create
  @wine = Wine.new(wine_params)
  @wine.register.build
  # error checking code
end 
def wine_params
  params.require(:wine).permit(:name, :cuvee, register_attributes: [:id, :short_name])

来自wines\_form.html.erb

<%= simple_form_for @wine do |f| %>
<div class="field">
  <%= f.label :name %>
  <%= f.text_field :name %>
</div>
<% f.simple_fields_for :register do |r| %>
  <%= r.label :short_name %>
  <%= r.input :short_name %> 
<% end %>
</div>

我在def createdef new方法中尝试了各种不同的代码,包括(def create@wine.register.build = Register.new(register_params) @wine.register.builddef new simple_fields_for

我做错了什么?显然,当我需要创建一个对象时,第二个需要实例化,以便{{1}}生成输入区域。

2 个答案:

答案 0 :(得分:1)

尝试改为Wine.build_register。像这样:

def create
  @wine = Wine.new(wine_params)
  @wine = @wine.build_register
  #other code
end

答案 1 :(得分:1)

在您的葡萄酒模型中:

class Wine
  has_one :register
  accepts_nested_attributes_for :register
end

在Wine控制器中定义以下新操作:

def new
  @wine = Wine.new
  @register = @wine.build_register
end

在您看来:

<%= simple_form_for @wine do |w| %>
  <%= w.input: :name %>
  <%= w.simple_fields_for :register do |r| %>
    <%= r.input :short_name %>
  <% end %>
<% end %>
相关问题