我正在使用Ruby on Rails 3,我想使用命名空间类设置多态关联。
<<p> 迁移/strong>:create_table :users_users do |t|
t.integer :id
t.string :full_name
t.references :userable, :polymorphic => true
end
create_table :users_profiles do |t|
t.integer :id
...
end
create_table :users_accounts do |t|
t.integer :id
...
end
:
class Users::User < ActiveRecord::Base
# Association ...
end
class Users::Profile < ActiveRecord::Base
# Association ...
end
class Users::Account < ActiveRecord::Base
# Association ...
end
我必须如何编写代码关联以上类(使用:class_name => "Users:User", ...
?) 为了自动创建和自动销毁关联的模型记录,"映射"那些在users_users
表,反之亦然?
你有什么建议吗?我将在userable_type
属性有什么字符串值(例如:'Users::Profile', 'Profile',…)?
要设置关联,您不需要使用类名…
class Users::User < ActiveRecord::Base
belongs_to :userable, :polymorphic => true
end
class Users::Profile < ActiveRecord::Base
has_one :user, :as => :userable, :dependent => :destroy
end
class Users::Account < ActiveRecord::Base
has_one :user, :as => :userable, :dependent => :destroy
end
:dependent => :destroy
将处理删除它们时,用户::用户被销毁,但在创建方面,你有相同的选择,因为你有正常的关系。如果你是从一个表单中做的,最好使用嵌套属性。
在数据库中,userable_type列将包含名称空间。所以应该是'Users::Account'或'Users::Profile'。