有许多和属于一对一的关系

时间:2013-02-13 00:06:08

标签: ruby-on-rails has-and-belongs-to-many

我正在尝试跟踪用户创建的signup_conversions数量 因此,我有以下两种模式:

signup_conversion.rb

class SignupConversion < ActiveRecord::Base
  belongs_to :user
  belongs_to :convertee, :class_name => "User", :foreign_key => 'convertee_id'
  attr_accessible :convertee_id
end

user.rb

class User < ActiveRecord::Base
  attr_accessible :name, :email, :password, :password_confirmation
  belongs_to :signup_conversion
  has_many :signup_conversions
end

这会这样吗?或者我错过了一些关键的东西?

2 个答案:

答案 0 :(得分:2)

我还没有尝试过代码,但是我给了你一些希望你觉得有用的提示。

  • 我认为每个has_many / has_one语句应该有其对应的belongs_to,因此三个belongs_to和一个has_many看起来不太好

  • 我不确定has_one :signup_conversionhas_many :signup_conversions会很好地合作,所以我宁愿更改名称。我也改变了其他名称,试图让关联更​​清晰,尽管我不确定我是否完全理解它们所代表的真实概念。你可能会想出更好的名字。

  • 默认情况下,会在猜测外键时将后缀_id添加到关联名称中,因此在这种情况下您无需指定它。此外,我认为您不需要使该属性可访问,至少不能使该关联工作。

    <强> signup_conversion.rb

    class SignupConversion < ActiveRecord::Base
      belongs_to :owner    , :class_name => "User"
      belongs_to :convertee, :class_name => "User"
    end
    

    <强> user.rb

    class User < ActiveRecord::Base
      attr_accessible :name, :email, :password, :password_confirmation
      has_one  :owned_signup_conversion     , :class_name => "SignupConversion"
      has_many :triggered_signup_conversions, :class_name => "SignupConversion"
    end
    

答案 1 :(得分:0)

您需要的代码多于此处所需的代码;你只需要

class SignupConversion < ActiveRecord::Base
   belongs_to :user
end

class User < ActiveRecord::Base
   attr_accessible :name, :email, :password, :password_confirmation
   has_many :signup_conversions
end

然后,您需要在signup_conversions表中使用user_id列,然后调用

@user.signup_conversions

在你的视图或控制器中。