我的协会有问题。我有n:n关系,一切都很顺利,但如果我想初始化新对象然后保存它,它将通过保存与关联。例如。
模特:
class User
has_many :users_in_organizations, :class_name => 'UserInOrganization'
has_many :organizations,:through => :users_in_organizations
end
#Attributes [:user_id, :organization_id, :user_role]
class UserInOrganization
set_table_name 'users_in_organizations'
belongs_to :user
belongs_to :organization
end
class Organization
has_many :users_in_organizations, :class_name => 'UserInOrganization'
has_many :users, :through => :users_in_organizations
end
这项工作很好,但问题是
org = User.first.organizations.new(:name => 'Test') # new || build is the same
org.save # => true
User.first.organizations # => []
Organization.all # => ['Test']
但如果我使用create那么它可以正常工作
org = User.first.organizations.create(:name => 'Test')
User.first.organizations # => ['Test']
Organization.all # => ['Test']
有谁能告诉我我做错了什么?
谢谢你:)
答案 0 :(得分:2)
如果您希望它适用于new
方法,请尝试以下操作:
u = User.first
u.organizations.new :name => "new organozation"
u.save
u.organizations.size
=> 1
执行org = User.first.organizations.new :name => "test"
后,您只分配给org
组织,并且只保存该对象。它不保存关联的对象。这就是为什么它不起作用的原因。
当您调用create
时,它会将创建的对象保存到db,使用new
或build
不会将其保存到db。