2

我正在尝试跟踪用户创建了多少 signup_conversions。
因此,我有以下两个模型:

注册转换.rb

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

用户.rb

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

这会那样工作吗?还是我在这里遗漏了一些重要的东西?

4

2 回答 2

3

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

  • 我认为每个has_many/has_one语句都应该有其对应的belongs_to,所以三belongs_to加一has_many看起来不太好。

  • 我不确定has_one :signup_conversion并且has_many :signup_conversions会一起玩得很好,所以我宁愿改变名字。我也更改了其他名称以尝试使关联更清晰,尽管我不确定我是否完全理解它们所代表的真实概念。你可能会想出更好的名字。

  • 默认情况下,外键是_id在关联名称中添加后缀来猜测的,因此在这种情况下您不需要指定它。另外,我认为您不需要使该属性可访问,至少不需要使关联起作用。

    注册转换.rb

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

    用户.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
    
于 2013-02-14T02:07:42.813 回答
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

在您的视图或控制器中。

于 2013-02-13T00:12:03.133 回答