我有两个模型,Wines
has_one :register
和Registers
belong_to :wine
。 registers_controller.rb
很简单,由rails generate scaffold
生成。
我想在register
对象的同时创建一个wine
对象,并确保它们正确链接。因此,我试图以同样的形式这样做。
我正在使用simple_form_for
和simple_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 create
和def new
方法中尝试了各种不同的代码,包括(def create
)@wine.register.build = Register.new(register_params)
@wine.register.build
和def new
simple_fields_for
。
我做错了什么?显然,当我需要创建一个对象时,第二个需要实例化,以便{{1}}生成输入区域。
答案 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 %>