2012-02-04 14 views
0

親モデルにネストされたフォームを通じてhas_many_throughリレーションシップを追加しようとしています。これが可能かどうかわかりませんか?ネストされたフォームのhas_manyからcheckboxまでの処理

ネストされたフォームは、チェックボックスを付けずに正常に機能します。チェックボックスは、入れ子になっているフォームの外にあるときは正常に動作します。

= 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> 

すべての値は、チェックボックス

--- EDIT ADDED MODELSせずに完全に保存するように私は思います - -

Radusは多くのRadcheck(レガシーDBのために単数)を持っています。 Radcheckはradusergroupを通して多くのradgroupを持っています。

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 

- UPDATE TWO -

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

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

---私のDBは現在、次のようになりUPDATE 3 ---

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

私は解決策を持っています下記のように働いてください。

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

これが可能である:

はデシベルに、ないradcheck_idをradcheck_usernameとradgroup_groupnameを挿入私は何を期待していたでしたか?

+0

可能であれば、モデルを表示する必要があります。 – Ryan

+0

@ Ryanさん、ちょうど私の質問を更新しました。ありがとう – simonmorley

+0

** has_many:through **は** something_ids **メソッドを生成しません。なぜあなたはこのRadusergroup **クラスを持っていますか?そこに有益な情報はありますか? –

答えて

1

問題は、まだ定義されていない方法でRadcheckのさまざまなRadgroupにアクセスしようとしているようです。私はこれに対するいくつかの解決策を見ることができます。あなたのモデルに欠けているradgroup_idsメソッドを追加することです。あるいは、あなたはインクルードを呼び出すことができると思いますか? Radchecksでradgroupの関係です。あなたのRadcheckクラス内

ソリューション

、定義:

def radgroup_ids 
    radgroups.map(&:id) 
end 

を溶液B

あなたが含まRadgroups

のためにチェックしている途中にマイナーな変更を加えます
@radcheck.radgroups.include?(group) 
+0

クール、私はそれをチェックします。ありがとう – simonmorley

+0

それは動作するようです。 ID以外の別の値を挿入することができるかどうか教えてください。私はユーザー名(例えば)を使用したいと思います。 – simonmorley

+1

ソリューションAを参照する場合は、radgroupが提供するすべてのメソッドにto_procショートカット(&:記号)を使用できます。それがあなたが意味するものでないなら、私はあなたが何を求めているのかよく分かりません。ユーザグループの配列があなたのラジオグループのコレクションから出てくるようにしたいのですか、あるいはどこかのユーザ名を使用しようとしていますか?私は実際のデータベースを見ることができないので、どのモデルがどのプロパティを提供しているのか分かりません。 – Ryan

関連する問題