首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >accepts_nested_attributes_for和validates_uniqueness_of会生成错误的sql请求。

accepts_nested_attributes_for和validates_uniqueness_of会生成错误的sql请求。
EN

Stack Overflow用户
提问于 2015-05-30 23:30:26
回答 1查看 202关注 0票数 2

我有奇怪的验证请求。下面是我的代码:

代码语言:javascript
复制
#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时:

代码语言:javascript
复制
e = Exchange.new({"name"=>"Test", "exchanges_users_attributes"=>{"0"=>{"user_id"=>"4"}, "1"=>{"user_id"=>"1"}}}) ; e.save

Rails通过这些请求验证了唯一性:

代码语言:javascript
复制
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“部分是错误的,但我不知道为什么会发生这种情况。你有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2015-06-09 04:33:42

因为您有validates_presence_of :exchange,所以这个查询应该是良性的,但无用。您可以通过首先创建Exchange记录并应用其属性来解决此问题

代码语言:javascript
复制
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!
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30547950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档