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 用于返回nil的Rails字段_Ruby On Rails_Ruby On Rails 4_Fields For - Fatal编程技术网

Ruby on rails 用于返回nil的Rails字段

Ruby on rails 用于返回nil的Rails字段,ruby-on-rails,ruby-on-rails-4,fields-for,Ruby On Rails,Ruby On Rails 4,Fields For,我想我在写的过程中解决了这个问题。我将在下面发布我的解决方案 tl;dr Rails字段\u用于不生成预期参数 我有一个用户类,其代码如下: class User < ActiveRecord::Base has_one :woojit, dependent: :destroy, validate: true accepts_nested_attributes_for :woojit # ... more end 但我在create操作中实际得到的是一个带有以下子集的par

我想我在写的过程中解决了这个问题。我将在下面发布我的解决方案

tl;dr Rails字段\u用于不生成预期参数

我有一个用户类,其代码如下:

class User < ActiveRecord::Base
  has_one :woojit, dependent: :destroy, validate: true
  accepts_nested_attributes_for :woojit

  # ... more
end
但我在create操作中实际得到的是一个带有以下子集的params散列:

{
  "user" => {
    "woojit_attributes" => {
       "attr_1"=>"Foo", # etc
    }
  }
}
{
  "user" => {
    "woojit" => {
       "attr_1"=>"Foo", # etc
    }
  }
}
即“woojit”而不是“woojit_属性”。我可以在create操作中解决这个问题,但这似乎是解决问题的可怕方式。我想知道为什么钥匙一开始就命名错误

我最初尝试使用行
(ie符号而不是实例变量),而不是在#新操作中构建Woojit对象


在“一对一”部分中,建议这样做,但块中的代码从未执行过,因此该行返回了
nil
——并且woojit参数从未以任何形式出现在create操作中

因此,问题显然在于,当给定一个模型实例(
@woojit
)而不是一个符号(
:woojit
)时,“字段”的行为不同

在前一个实例中,它生成引用(模型名称)的字段,例如:


在后一个实例中,它生成引用模型属性的字段,例如:

<input type="text" name="user[woojit_attributes][woojit_attr]" id="user_pledge_attributes_pledgor_name" />

希望这能帮别人省去一些我刚刚经历的挫折

{
  "user" => {
    "woojit_attributes" => {
       "attr_1"=>"Foo", # etc
    }
  }
}
{
  "user" => {
    "woojit" => {
       "attr_1"=>"Foo", # etc
    }
  }
}
<input type="text" name="user[woojit][woojit_attr]" id="user_pledge_pledgor_name" />
<input type="text" name="user[woojit_attributes][woojit_attr]" id="user_pledge_attributes_pledgor_name" />