Rails 4 - 使用has_many创建记录

时间:2015-06-12 08:42:02

标签: ruby-on-rails activerecord

在我的项目中,我有类似的东西:

class User < ActiveRecord::Base
  has_many  :roles
  has_many  :websites, through: :roles
end

class Website < ActiveRecord::Base
  validates                 :name, presence: true
  has_many                  :roles
  has_many                  :users, through: :roles
end

class Role < ActiveRecord::Base
  validates :name, presence: true
  belongs_to :user
  belongs_to :website
end

所以当我尝试做的时候:

User.first.websites.create(name: "First")

我有这个错误

ActiveRecord::RecordInvalid: Validation failed: Name can't be blank

如何在一行中创建新的用户网站?

2 个答案:

答案 0 :(得分:0)

我认为如果您从validates :name, presence: true模型中删除role,那么它就可以正常运行。

答案 1 :(得分:0)

验证错误实际上来自Role模型,它还具有name属性的验证。

您可以使用accepts_nested_attributes_for

通过角色创建网站,从而在一行中完成
class Role < ActiveRecord::Base
  validates :name, presence: true
  belongs_to :user
  belongs_to :website

  accepts_nested_attributes_for :website
end

User.first.roles.create(name: "Role name", website_attributes: { name: "Website name" })