Rails复杂的关系

时间:2014-08-13 16:18:11

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

我有以下类,其关系定义如下:

class User < ActiveRecord::Base
 belongs_to :clan
 has_one :found_clan,class: Clan,foreign_key: 'founder'
end

class Clan < ActiveRecord::Base
 has_many :users, primary_key: 'id', foreign_key: 'clan_id'
 belongs_to :founder,class: User,primary_key: 'founder'
end

用户模型有一个名为clan_id

的字段

Clan模型有一个名为founder

的字段

我想要它:

user.found_clan =&gt;产生一个具有user founder

的氏族对象

user.clan =&gt;导致用户clan_id

指向的clan对象

clan.founder =&gt;产生clan.founder指向

的用户对象

clan.users =&gt;生成由users

指向clan的所有user.clan_id数组

1 个答案:

答案 0 :(得分:2)

您的代码有几个问题:

  1. Rails协会助手将class_name: 'Model'作为选项,而不是class: Model
  2. 您应该为您的创始人专栏founder_id命名,而不仅仅是founder
  3. 如果要为联接指定表格列,则必须在关系的两边使用foreign_key(而不是primary_key!)
  4. 对于坚持Rails&#39;命名约定,您无需提供primary_keyforeign_key选项(在本例中为Clan has_many :users
  5. 这应该有效:

    class User < ActiveRecord::Base
      belongs_to :clan
      has_one :clan_founded, class_name: 'Clan', foreign_key: 'founder_id'
    end
    
    class Clan < ActiveRecord::Base
      has_many :users
      belongs_to :founder, class_name: 'User', foreign_key: 'founder_id'
    end