【发布时间】:2017-02-21 17:51:56
【问题描述】:
我查看了类似问题的各种答案,但还没有完全破解。
wine 模型是用 has_one :register, :dependent => :destroy 定义的,我添加了 accepts_nested_attributes_for :register 是对还是错。 register 定义为 belongs_to :wine。
wines_controller.rb 中create 的代码是:
def new
@wine = Wine.new
@register = Register.new
def create
@wine = Wine.new(wine_params)
@register = @wine.registers.build(register_params)
respond_to do |format|
if @wine.save
#success
else
format.json { render json: @wine.errors, status: :unprocessable_entity }
format.json { render json: @register.errors, status: :unprocessable_entity }
end
end
end
我用于创建new wine 的表单具有以下代码:
<%= simple_form_for @wine do |f| %>
# various working elements
<div class="field">
<% f.fields_for :register do |r| %>
<%= r.label :short_name %>
<%= r.text_field :short_name %>
<%= r.label :barcode %>
<%= r.text_field :barcode %>
<% end %>
</div>
当调用此表单时,不会从 f.fields_for 命令创建任何字段,但会执行此块,因为我可以在其中添加测试按钮以证明它已被访问。
如果我尝试制作葡萄酒,我会收到以下错误消息:
undefined method `registers' for #<Wine:0x007f1204375330> Did you mean? register register= register_id
我相信使用.build 可以确保数据完整性:我不想创建没有对应register 的wine。我尝试过考虑嵌套属性,但这似乎被许多人认为是一个糟糕的计划。这种当前的方法感觉是正确的,但我认为我至少缺少对语法的一些理解。
以后有必要将其他模型链接到register,这些模型不会与葡萄酒相关联。我正在考虑采用类似的方法,但我很高兴被告知要重新考虑!
【问题讨论】:
标签: ruby-on-rails