我使用的是Rails 4.2。
我有四种模式:
class User < ActiveRecord::Base
belongs_to :organization
has_many :licenses
end
class License < ActiveRecord::Base
belongs_to :user #, autosave: true
end
class Organization < ActiveRecord::Base
has_many :users
end
class Application < ActiveRecord::Base
has_many :licenses
end
然后我有代码看起来像这样为用户创建License
:
def user
@_user ||= User.find(...)
end
def create_license
license = License.find_or_initialize_by(application: @application, user: user)
if license.user.organization.nil?
license.user.organization = @organization
end
if license.user.organization == @organization
license.expires_on = nil
license.save
else
license.errors.add(:user, "User belongs to different organization")
end
license
end
此代码的问题在于,当我运行license.save
时,它不会保存user
对象,即组织未更改。
所以我将belongs_to :user, autosave: true
添加到License
类,以强制它保存用户。在这种情况下,这可以正常工作。
但是,如果我设置autosave
选项并运行如下代码:
user = User.new
user.licenses.build(...)
user.save
用户对象每次都会获得两次验证错误。
我做的事情很奇怪吗?
答案 0 :(得分:0)
您应该从belongs_to中删除autosave:true。 它也会自动保存许可证。 正如您添加了自动保存。它正在运行两次验证
答案 1 :(得分:0)
这是Rails中的一个错误,请参阅:https://github.com/rails/rails/issues/20874