【发布时间】:2015-10-24 14:16:10
【问题描述】:
根据许多 SO 答案,我找到了解决问题的方法。 但是,我对 Rails 的魔法不太满意,我会理解我的网络应用程序中发生了什么。 我解释一下上下文:
我有两个模型:
class Registry < ActiveRecord::Base
belongs_to :profession
accepts_nested_attributes_for :profession
end
class Profession < ActiveRecord::Base
has_many :registries
end
和一个带有 profession 模型的嵌套属性的表单(用于 registry )
<%= 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 和 SO 上搜索,我发现:
嵌套属性允许您在关联记录上保存属性 通过父母。
所以,也许这种行为是由于我在子表中使用嵌套属性引起的。但我会更好地解释为什么 :professions 我看到了表单的属性,而 :profession 没有。
现在,我在registries_controller 中使用它解决了这个问题:
def new
@registry = Registry.new
@registry.build_profession
end
我添加了@registry.build_profession,现在我可以使用单数形式的":profession"
我不知道发生了什么... 有人可以解释一下这两件事吗?真的,我对 Rails 的魔法不满意..
另外,如果我不想在专业表格部分插入数据,我有一个问题,专业行总是在数据库中创建。此行由 foreign_key 链接到注册表行,但为空白(当然,如果我没有在表单中写任何内容)。这真的是不可接受的..为什么我必须创建一行,然后再检查用户是否输入了值..这不好。我知道,嵌套属性应该在 parent 中,但我有必要在 child 中使用它们。真的,rails 程序员没有想到这种可能性吗? 我在 Rails 中编程了 6 个月,这并不多,我知道..但有没有可能每次我必须修复或发现新事物(全新的)??
我快疯了。
编辑:我正在寻找对问题的解释。不是为了解决。
【问题讨论】:
-
我正在搜索问题的解释。不是解决它。
-
所以“这似乎是一个记录在案的错误”。这是否意味着没有人知道我的问题的答案?
标签: ruby-on-rails ruby-on-rails-4 nested-forms nested-attributes