2011-11-27 64 views
1

除了this問題的幫助,我終於有了很多通過關係工作。有許多通過選擇主鍵和外鍵

不幸的是,因爲我正在使用遺留數據庫,所以我無法使用默認的rails連接方法,因此需要更改列名稱和字段值。

我有兩個模型:raduser和radgroup,他們通過radusergroup加入。下面的模型。

我可以讓連接使用鍵raduser_id和radgroup_id工作。我需要做的是分別將這些更改爲用戶名和組名。

不是表看起來像這樣的:

+---------------------------+---------------------------+----------+----+ 
| raduser_id    | radgroup_id    | priority | id | 
+---------------------------+---------------------------+----------+----+ 
| 33      | 2       |  1 | 21 | 
| 33      | 1       |  1 | 20 | 
| 32      | 3       |  1 | 25 | 
+---------------------------+---------------------------+----------+----+ 

我需要它看起來像這樣:

+---------------------------+---------------------------+----------+----+ 
| username     | groupname     | priority | id | 
+---------------------------+---------------------------+----------+----+ 
| jenny      | staff      |  1 | 21 | 
| steve      | sports     |  1 | 20 | 
| ianw      | travel     |  1 | 25 | 
+---------------------------+---------------------------+----------+----+ 

我試着在我的模型以下,但到目前爲止,它是不成功的。

class Raduser < ActiveRecord::Base 
    has_many :radusergroup, :dependent => :destroy, :primary_key => :groupname, :foreign_key => :username 
    has_many :radgroup, :through => :radusergroup 
end 

class Radusergroup < ActiveRecord::Base 
belongs_to :raduser, :foreign_key => 'groupname', :primary_key => 'username' 
belongs_to :radgroup, :foreign_key => 'username', :primary_key => 'groupname' 
end 

class Radgroup < ActiveRecord::Base 
    set_table_name 'radgroup' 
    has_many :radusergroup, :dependent => :destroy, :primary_key => :groupname, :foreign_key => :username 
    has_many :raduser, :through => :radusergroup 
end 

什麼是正確的方法來做到這一點?

- 更新 -

表單代碼:

- Radgroup.all.each do |radgroup| 
    = check_box_tag "raduser[radgroup_ids][]", radgroup.id, @raduser.radgroup.include?(radgroup), :id => "raduser_radgroup_id_#{radgroup.id}" 
    = radgroup.groupname 

回答

2

你可能不希望一個ID列在您的連接表:

class CreateRadusergroups < ActiveRecord::Migration 
    def change 
    create_table :radusergroups, :id => false do |t| 
     t.integer :priority 
     t.string :username, :groupname 
    end 
    end 
end 

下面是如何設置型號:

class Raduser < ActiveRecord::Base 
    has_many :radusergroups, :foreign_key => :username 
    has_many :radgroups, :through => :radusergroups 
end 

class Radgroup < ActiveRecord::Base 
    has_many :radusergroups, :foreign_key => :groupname 
    has_many :radusers, :through => :radusergroups 
end 

class Radusergroup < ActiveRecord::Base 
    belongs_to :raduser, :foreign_key => :username 
    belongs_to :radgroup, :foreign_key => :groupname 
end 
+0

認爲可行。在提交表單時,它仍然會輸入ID。用表單代碼更新了我的問題。我需要改變什麼? Ĵ –