我正在使用Ruby on Rails 3,我想使用命名空间类设置多态关联。
迁移是:
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',...)?
答案 0 :(得分:1)
要设置关联,您不需要使用类名...
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'。