我有奇怪的验证请求。下面是我的代码:
#app/models/user.rb
class User < ActiveRecord::Base
has_many :exchanges_users, inverse_of: :user
end
#app/models/exchange.rb
class Exchange < ActiveRecord::Base
has_many :exchanges_users, inverse_of: :exchange
accepts_nested_attributes_for :exchanges_users, :allow_destroy => true, :reject_if => :all_blank
end
#app/models/exchanges_user.rb
class ExchangesUser < ActiveRecord::Base
validates_presence_of :exchange
validates_presence_of :user
validates_uniqueness_of :exchange, :scope => [:user]
belongs_to :exchange, inverse_of: :exchanges_users
belongs_to :user, inverse_of: :exchanges_users
end并且,在控制台中,当我尝试创建Exchange时:
e = Exchange.new({"name"=>"Test", "exchanges_users_attributes"=>{"0"=>{"user_id"=>"4"}, "1"=>{"user_id"=>"1"}}}) ; e.saveRails通过这些请求验证了唯一性:
SELECT 1 AS one FROM "exchanges_users" WHERE ("exchanges_users"."exchange_id" IS NULL AND "exchanges_users"."user_id" = 4) LIMIT 1
SELECT 1 AS one FROM "exchanges_users" WHERE ("exchanges_users"."exchange_id" IS NULL AND "exchanges_users"."user_id" = 1) LIMIT 1显然,"IS NULL“部分是错误的,但我不知道为什么会发生这种情况。你有什么想法吗?
发布于 2015-06-09 04:33:42
因为您有validates_presence_of :exchange,所以这个查询应该是良性的,但无用。您可以通过首先创建Exchange记录并应用其属性来解决此问题
ActiveRecord::Base.transaction do
e = Exchange.new
e.save!(validate: false)
e.update_attributes({"name"=>"Test", "exchanges_users_attributes"=>{"0"=>{"user_id"=>"4"}, "1"=>{"user_id"=>"1"}}})
e.save!
endhttps://stackoverflow.com/questions/30547950
复制相似问题