【问题标题】:Nested attributes and belongs_to嵌套属性和 belongs_to
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2013-01-02
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多