Ruby Rails3关联,并接受用户id验证失败时的嵌套属性

Ruby Rails3关联,并接受用户id验证失败时的嵌套属性,ruby,ruby-on-rails-3,associations,nested-attributes,Ruby,Ruby On Rails 3,Associations,Nested Attributes,我正在跟随Rails教程为自己做一个小项目,然后尝试前进 我面临着一个问题,我找到了解决办法,但我真的很感激你的想法和意见,因为要让它发挥作用,我必须在协会中禁用验证 上下文如下:应用程序(其实际功能的大名…)让用户跟踪他们的体重。我希望当用户注册时,他/她在移动中输入第一个度量值 以下是简化模型: User.rb class User < ActiveRecord::Base attr_accessible :email, :name, :password, :password_co

我正在跟随Rails教程为自己做一个小项目,然后尝试前进

我面临着一个问题,我找到了解决办法,但我真的很感激你的想法和意见,因为要让它发挥作用,我必须在协会中禁用验证

上下文如下:应用程序(其实际功能的大名…)让用户跟踪他们的体重。我希望当用户注册时,他/她在移动中输入第一个度量值

以下是简化模型:

User.rb

class User < ActiveRecord::Base
  attr_accessible :email, :name, :password, :password_confirmation, :measures_attributes

  has_secure_password

  has_many :measures, dependent: :destroy
  accepts_nested_attributes_for :measures

  # here goes validations before_save, etc. taken from the Rails Tutorial
end
我发现使其工作的唯一方法是取消:user_id验证,以确定度量模型中是否存在。我想强调的是,当此验证关闭时,用户将被保存,度量值将被保存并与新创建的用户正确关联

我做错什么了吗?度量模型中的:user_id存在验证真的有用吗(它在Rails教程中,对我来说非常有意义)?如果是,为什么打开时度量值验证失败


事先非常感谢。

我想我可能在您的代码中发现了一个错误,该错误可能会导致您看到的错误

在新控制器中,您专门创建一个关联:

@user.measures.build
在创建控制器中,根据传入的字段创建新元素

@user = User.new(params[:user])
在某些情况下,关联的元素将被删除。我不记得这是默认情况下发生的,如果它没有验证,或者是否有一个选项需要设置以使其删除

我想你可能需要补充一点

@user.measure.build if @user.measures.empty?
render:new
之前的
create
controller
else
子句中


我不知道您是否真的遇到了这个问题,但这可以解释为什么没有设置与
用户的关联。

您可以尝试验证
:User
而不是
用户id
。然后可能会发现,即使用户尚未保存,这两个字段也会在内存中关联。

在您的
度量值/字段中
部分中,您是否为
用户id
提供了一个隐藏字段,以确保它在整个过程中得到执行?啊,不,我没有!但是用户id是不可访问的,在这个阶段它不会退出,因为我们正在用户创建过程中。不管怎样,我还是要试试这个,谢谢,因为:user\u id不可访问,我得到错误,无法批量分配受保护的属性:user\u idYeah,我想。您已将“仅测量”上的可访问属性设置为包括
重量
。这是正确的行为,您可以尝试
验证:user
而不是
user\u id
。然后可能会发现,即使用户尚未保存,这两者在内存中也有关联。谢谢。我认为这并不是真正的问题,但你的解释是有道理的,所以我添加了这一行,因为我不认为它会造成任何伤害。这一行工作得很好,包括错误消息。非常感谢你的帮助
* Measures user can't be blank
@user.measures.build
@user = User.new(params[:user])
@user.measure.build if @user.measures.empty?