我有一个模型 User 和一个嵌套模型 Mobility
class User < ActiveRecord::Base
has_many :mobilities, :dependent => :destroy
accepts_nested_attributes_for :mobilities
end
和
class Mobility < ActiveRecord::Base
belongs_to :mobile_user, :class_name => 'User'
validates :city_id, :presence =>true
validates :user_id, :presence =>true
validates :city_id, :uniqueness => {:scope => [:user_id]}
end
我的观点
=form_for @user, :as => :user, :html =>{ :class => 'form-horizontal'} do |f|
=f.fields_for :mobilities do |city_form|
=city_form.text_field :city_id, :id => "city_id_#{index}"
= f.submit "Retour"
我的问题是,当我提交表单时,Rails 会呈现此验证错误:
移动用户 > doit être rempli(e)
但如果我评论这一行:
#validates :user_id, :presence =>true
我的 Mobility 和 User 对象都被保存并且知道什么:@mobility 的 user_id 字段是可以的(表示我的@user 的 ID)
如果我发送内部具有 2 个相同移动性的表单,则两个模型都会被保存,但似乎我对唯一性的验证没有检查任何内容,因为我的数据库中有 2 个具有相同 user_id 和 city_id 的 Mobility 对象......
事实上,我的验证似乎在验证时无法读取我的 user_id 的密钥。我明白,因为我的用户模型还没有被保存并且还没有任何 ID ......但这是我的问题:
我如何同时检查:user_id 的存在和范围的唯一性???