帮我找出为什么新的和构建方法不起作用

时间:2010-09-28 14:15:48

标签: ruby-on-rails ruby

我的协会有问题。我有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']

有谁能告诉我我做错了什么?

谢谢你:)

1 个答案:

答案 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,使用newbuild不会将其保存到db。