嵌套属性和belongs_to

时间:2015-10-24 14:16:11

标签: ruby-on-rails ruby-on-rails-4 nested-forms nested-attributes

我找到了许多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个月,它并不多,我知道..但是,每次我必须修理或发现新事物(全新的)有可能吗?

我疯了。

编辑:我正在解释这个问题。不解决它。

1 个答案:

答案 0 :(得分:0)

实际上,由于您正在使用has_many关联,因此您的控制器应为:

   def new
     @registry = Registry.new
     @registry.profession.build
   end