我找到了许多SO答案之后我的问题的解决方案。 但是,我对Rails魔术不太满意,我会理解我的网络应用程序中发生了什么。 我解释了上下文:
我有两种模式:
class Registry < ActiveRecord::Base
belongs_to :profession
accepts_nested_attributes_for :profession
end
class Profession < ActiveRecord::Base
has_many :registries
end
以及registry
模型的嵌套属性的表单(profession
)
<%= form_for(@registry) do |f| %>
...
<%= f.fields_for :profession do |ff| %>
...
问题是,如果我使用:
<%= f.fields_for :profession do |ff| %>
我没有显示职业表的属性。相反,如果我使用
:professions
这样:
<%= f.fields_for :professions do |ff| %>
我看到了表格。我不明白为什么会发生这种情况,但随后在google上搜索,我发现:
嵌套属性允许您保存关联记录的属性 通过父母。
因此,可能导致此行为导致我在子表中使用嵌套属性。但我会更好地解释为什么:professions
我看到了表单的属性和:profession
,没有。
现在,我在registries_controller
:
def new
@registry = Registry.new
@registry.build_profession
end
我添加了@registry.build_profession
,现在我可以使用单数形式":profession"
我不知道发生了什么...... 有人可以解释我这两件事吗?真的,我并不喜欢Rails魔术......
此外,我有一个问题,如果我不想在职业表单的部分插入数据,行业行总是在数据库中创建。此行由foreign_key链接到注册表行,但是为空(如果我在表单中没有写任何内容,当然)。这真是不可接受..为什么我要创建一行,然后检查用户是否放了值......这不好。我知道,嵌套属性应该在父级中,但我有必要在子级中使用它们。真的,rails程序员没有想到这种可能性吗? 我在轨道上编程了6个月,它并不多,我知道..但是,每次我必须修理或发现新事物(全新的)有可能吗?
我疯了。
编辑:我正在解释这个问题。不解决它。答案 0 :(得分:0)
实际上,由于您正在使用has_many
关联,因此您的控制器应为:
def new
@registry = Registry.new
@registry.profession.build
end