2012-02-04 42 views
0

我試圖通過嵌套在父模型中的表單添加has_many_through關係。我無法弄清楚這是否可能?通過複選框以嵌套的形式處理has_many

沒有複選框,嵌套窗體工作正常。當這些複選框位於嵌套表單之外時,它們可以正常工作。

= semantic_form_for @raduser do |f| 
    %ul  
    %li 
     = f.text_field :expiration, :placeholder => 'Expiration Date', :id => 'expiration_date' 
    - f.fields_for :radcheck do |builder| 
     = builder.text_field :username, :placeholder => 'Stuff' 
     -Radgroup.all.each do |group| 
     %li 
      = check_box_tag 'radcheck[radgroup_ids]', group.id, @radcheck.radgroup_ids.include?(group.id) 
      = group.groupname   

    %li 
     = f.submit 

這將引發一個錯誤:

undefined method `radgroup_ids' for #<ActiveRecord::Relation:0x007faaa24c2468> 

我得建立模型罰款,我認爲所有的值保存完美未經複選框

---編輯模型中加入 - -

Radusers有許多Radcheck(單數由於遺留數據庫)。 Radcheck通過radusergroup有許多radgroups。

class Raduser < ActiveRecord::Base 

    has_many :radcheck, :dependent => :destroy 
    accepts_nested_attributes_for :radcheck, :reject_if => lambda { |a| a[:value].blank? }, :allow_destroy => true 

end 

class Radcheck < ActiveRecord::Base 
    self.table_name = 'radcheck' 

    attr_accessible :attribute_name, :username, :value, :op, :radgroupcheck_id, :radcheck_serial, :radgroup_ids 

    belongs_to :raduser 

    has_many :radusergroup, :dependent => :destroy 
    has_many :radgroup, :through => :radusergroup 

end 

class Radgroup < ActiveRecord::Base 
    self.table_name = 'radgroup' 

    has_many :radusergroup, :dependent => :destroy 
    has_many :radcheck, :through => :radusergroup 

end 


class Radusergroup < ActiveRecord::Base 

belongs_to :radcheck 
belongs_to :radgroup 

end 

- 更新兩個 -

def new 
    @radcheck = Radcheck.new 
    ...  
end 

def create 
    @radcheck = Radcheck.new(params[:radcheck]) 
    ... 
end 

--- UPDATE 3 ---

我的數據庫目前看起來是這樣的:

+----------------+-----------------------+----------+------+ 
| radcheck_id | radgroup_id   | priority | id | 
+----------------+-----------------------+----------+------+ 
| 8    | 3      |  1 | 1 | 
| 4    | 9      |  0 | 2 | 
| 22    | 4      |  1 | 3 | 
| 2    | 6      |  1 | 4 | 

我有解決方案建議在下面工作。

我希望做的是插入radcheck_username和radgroup_groupname到數據庫,而不是radcheck_id:

+----------------+-----------------------+----------+------+ 
| ...username | --groupname   | priority | id | 
+----------------+-----------------------+----------+------+ 
| user123344  | group88888   |  1 | 1 | 
| shushQb  | 30-minutes   |  0 | 2 | 
| forty   | gigiig    |  1 | 3 | 
| snang   | ps-staff    |  1 | 4 | 

這可能嗎?

+0

如果可能,需要查看您的模型。 – Ryan 2012-02-05 08:26:29

+0

@Ryan,剛剛更新了我的問題。謝謝 – simonmorley 2012-02-05 11:32:24

+0

A ** has_many:通過**不會生成** something_ids **方法。爲什麼你有這個** Radusergroup **類?有沒有任何有用的信息,或只是ID? – 2012-02-05 13:30:43

回答

1

這個問題似乎是你試圖通過尚未定義的方法訪問Radcheck的各個Radgroup。我可以看到一些解決方案。一種方法是將缺少的radgroup_ids方法添加到您的模型中。或者,我認爲你可以打電話給包括? Radchecks radgroups關係。

解決方案A

在您Radcheck類,定義:

def radgroup_ids 
    radgroups.map(&:id) 
end 

溶液B

請給你檢查包括方式的微小變化Radgroups

@radcheck.radgroups.include?(group) 
+0

酷,我會檢查出來。謝謝 – simonmorley 2012-02-06 23:46:14

+0

這似乎工作。你能否告訴我,如果可以插入除ID之外的其他值?我寧願使用用戶名(例如)。 – simonmorley 2012-02-07 20:51:50

+1

如果您指的是解決方案A,您可以對radgroup提供的任何方法使用to_proc快捷方式(&:symbol)。如果這不是你的意思,那麼我不太清楚你在問什麼。你是否想要一組用戶名來自你的radgroup集合,或者你是否想在其他地方使用用戶名?由於我看不到實際的數據庫,我不知道哪些模型提供了哪些屬性。 – Ryan 2012-02-07 21:44:04

相關問題