在Rails中,使用新关联对象保存新对象失败

时间:2013-03-05 23:41:39

标签: ruby-on-rails activerecord

如何在连接模块属性上进行状态验证并将新对象和相关关联保存在一起?

CODE

class User < ActiveRecord::Base
   attr_accessible :email, :name, :password, :password_confirmation
   has_many :user_roles
   has_many :roles, through: :user_roles
   ...
end

class Role < ActiveRecord::Base
   before_save { |role| role.name = role.name.downcase }
   attr_accessible :name
   has_many :user_roles
   has_many :users, through: :user_roles
   validates :name, uniqueness: {case_sensitive: false}
end

class UserRole < ActiveRecord::Base
   belongs_to :user
   belongs_to :role

   validates :user, presence: true #verified this is the reason
   validates :role, presence: true #same with this validation
end

问题

如果我尝试创建一个新用户,为user.roles分配一个角色,并保存用户,除非我先保存用户,然后关联该角色并再次使用该角色保存用户,否则它将不会。

role = Role.find_by_name(:attendee)
@user = User.new(...set attr...)
if (role)
  @user.roles << role unless @user.roles.include?(role)
end
@user.save => #false

但如果我先保存用户然后设置角色,它会让我用角色保存用户

@user = User.new(...set attr...)
@user.save  => #true
@user.roles << role
@user.save => #true

我验证了我是否没有验证:user AND validates:role,presence:true它将同时保存带有Role关联的User对象。

如何设置带有加载角色的User.roles并在第一次设置角色时保存用户对象?

0 个答案:

没有答案