Ruby Rails3关联,并接受用户id验证失败时的嵌套属性
我正在跟随Rails教程为自己做一个小项目,然后尝试前进 我面临着一个问题,我找到了解决办法,但我真的很感激你的想法和意见,因为要让它发挥作用,我必须在协会中禁用验证 上下文如下:应用程序(其实际功能的大名…)让用户跟踪他们的体重。我希望当用户注册时,他/她在移动中输入第一个度量值 以下是简化模型: User.rbRuby 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
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
controllerelse
子句中
我不知道您是否真的遇到了这个问题,但这可以解释为什么没有设置与
用户的关联。您可以尝试验证: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?