使用命名空间类的多态关联

时间:2011-05-04 09:46:12

标签: ruby-on-rails ruby ruby-on-rails-3 class polymorphism

我正在使用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',...)?

1 个答案:

答案 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'。