关注Rails协会

时间:2015-06-08 16:30:02

标签: ruby-on-rails ruby ruby-on-rails-4 activesupport-concern

我正在使用我的rails应用程序的问题。我有不同类型的用户,因此我提出了loggable.rb问题。

我关心的是

included do 
        has_one :auth_info 
    end

因为包含关注点的每个用户都会与auth_info表关联。

问题是,我需要在auth_info表中放入哪些外键?

E.G

我有3种用户:

  1. 客户
  2. 卖方
  3. 访问者
  4. 如果我只有顾客,在我的餐桌计划中,我会放置字段

    id_customer
    

    但在我的情况下?

2 个答案:

答案 0 :(得分:0)

您可以使用polymorphic associations解决此问题(并放弃关注点):

class AuthInfo < ActiveRecord::Base
  belongs_to :loggable, polymorphic: true
end

class Customer < ActiveRecord::Base
  has_one :auth_info, as: :loggable
end

class Seller < ActiveRecord::Base
  has_one :auth_info, as: :loggable
end

class Visitor < ActiveRecord::Base
  has_one :auth_info, as: :loggable
end

现在您可以检索:

customer.auth_info # The related AuthInfo object
AuthInfo.first.loggable # Returns a Customer, Seller or Visitor

您可以使用rails g model AuthInfo loggable:references{polymorphic}创建模型,也可以手动为两列创建迁移。有关详细信息,请参阅文档。

答案 1 :(得分:0)

由于用户有角色&#39;客户&#39;,&#39;卖家&#39;访客&#39;。 在Users表中添加一个名为 role 的列。 将名为 user_id 的列添加到auth_infos表。

class AuthInfo < ActiveRecord::Base
  belongs_to :user
end

class User < ActiveRecord::Base
  has_one :auth_info
end

你可以做到

 user = User.first
 user.auth_info 

现在,您需要了解其他问题。