Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 嵌套属性并属于_Ruby On Rails_Ruby On Rails 4_Nested Forms_Nested Attributes - Fatal编程技术网

Ruby on rails 嵌套属性并属于

Ruby on rails 嵌套属性并属于,ruby-on-rails,ruby-on-rails-4,nested-forms,nested-attributes,Ruby On Rails,Ruby On Rails 4,Nested Forms,Nested Attributes,我根据这么多的答案找到了解决问题的办法。 但是,我对Rails magic不太满意,我会理解我的web应用程序中发生了什么。 我解释一下上下文: 我有两个模型: class Registry < ActiveRecord::Base belongs_to :profession accepts_nested_attributes_for :profession end class Profession < ActiveRecord::Base has_

我根据这么多的答案找到了解决问题的办法。 但是,我对Rails magic不太满意,我会理解我的web应用程序中发生了什么。 我解释一下上下文:

我有两个模型:

class Registry < ActiveRecord::Base
  belongs_to  :profession       
  accepts_nested_attributes_for :profession 
end

class Profession < ActiveRecord::Base
  has_many  :registries
end
问题是,如果我使用:

<%= f.fields_for :profession do |ff| %>
因此:

我添加了
@registry.build_profession
,现在我可以使用单数
“:profession”

我不知道发生了什么。。。 有人能给我解释一下这两件事吗?真的,我不喜欢Rails魔术

此外,我还有一个问题,因为如果我不想在专业表单的一部分中插入数据,那么专业行总是在数据库中创建的。此行通过外键链接到注册表行,但为空(当然,如果我没有在表单中写入任何内容)。这真的不可接受。为什么我必须在检查用户是否输入值之前创建一行。这不好。我知道,嵌套属性应该在父项中,但我有必要在子项中使用它们。真的,rails程序员不认为有这种可能性吗? 我在rails中编程了6个月,我知道这并不多,但有可能每次我都要修复或发现新事物(全新的)吗

我快疯了


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

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

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

我正在解释这个问题,可能是重复的。不是为了解决它,所以“这似乎是一个记录在案的bug”。这是否意味着没有人知道我问题的答案?
:professions
<%= f.fields_for :professions do |ff| %>
def new
  @registry = Registry.new
  @registry.build_profession
end 
   def new
     @registry = Registry.new
     @registry.profession.build
   end