2010-12-27 6 views
0

あなたのすべてのあなたの気持ちを楽しんでください。.build()に渡された属性はクエリに表示されません。

実際には単純なデータベーステーブルに行を挿入しようとするとかなり面白い問題に遭遇します。
基本的な考え方はかなりシンプルです。ユーザは、グループに追加されるはずのマルチセレクション内の1人または複数のユーザを選択する。

コードのこの部分は、user_group_relationshipsテーブルに行を挿入しますが、ユーザIDを常に

@group = Group.find(params[:group_id]) 

    params[:newMember][:users].each do |uid| 
     # For debugging purposes. 
     puts 'Uid:'+uid 

     @rel = @group.user_group_relationships.build(:user_id => uid.to_i)   
     @rel.save 

    end 

ユーザIDは常にそれが明らかであるにもかかわらず、ヌルとして挿入されます。この例のUIDは5であることが分かります。

Uidの:5
...
SQL(0.3ms) "user_group_relationships" ( "のcreated_at"、 "group_idの"、 "updated_atの"、 "USER_ID")。INSERT INTO「( 値2010-12-27 14:03:24.331303' 、2、 '2010-12-27 14:03:24.331303'、NULL)これが失敗した理由を

任意のアイデア?

答えて

1

UserGroupRelationshipモデルでは、user_idattr_accessibleではありません。

また、thisをチェックしたほうが適切かもしれません。

+0

まさに私が探していたもの!ありがとうございました!私は、新しい言語/フレームワークを習得するだけで痛みがあると思うのですが、あなたが利用できるすべてのツールについて本当に知っているわけではありません。 – deRailed

1

私は@ zabbaの答えはおそらくあなたが探している必要がありますが、私はここで余分なもののカップルをお勧めしますと思います。

あなたの「グループ」モデルと「ユーザー」モデルは、「UserGroup」モデルによって互いに接続されています。あなたは、関連付けが定義されている場合、あなたのコントローラに関係

class Group < ActiveRecord::Base 
    has_many :user_group_relationships 
    has_many :users, :through => :user_group_relationships 
end 

class UserGroupRelationship < ActiveRecord::Base 
    belongs_to :group 
    belongs_to :user 
end 

# Find the group 
@group = Group.find(params[:group_id]) 

# For each user id, find the user and add the user_group_relationship 
params[:newMember][:users].each{|u| @group.users << User.find(u) } 

は団体、あなたのために自動的に生成された方法でRailsのドキュメントを読む必要があります。多くの場合、協会と一緒に働くのはあなたが思っているよりも簡単です!私は常にRailsで新しいAPIを発見しています! :) がんばろう!

+0

すばらしい解決策!私はまだZabbaの答えを使用して終了しました。なぜなら、このケースでは、より効率的な方法と思われるからです。あなたの提案は、しかし、別のコントローラに便利だった。 :D – deRailed

関連する問題