2011-06-22 10 views
0

私はhas_and_belongs_to_manyテーブルに新しいリンクを作成するのと混同しています。product_idキーをhas_and_belongs_to_manyテーブルに保存することはできませんか?キーは自動増分です

私は.build(...)の使用が間違っていると思いますが、修正方法を見つけることができません。

は私が書いた:

@user = User.find(1) 
if (params[:product_id]) 
    @user.products.build(params[:product_id]) 
end 
logger.debug "product id is #{params[:product_id]}" 

respond_to do |format| 
    if @user.save 
     ... 

そして、私のテーブルproducts_usersで保存された関係は、自動インクリメントである??? myテーブルの内容の例:(user_id; product_id)= {(1; 16)(1; 17)(1; 18)...}

そして、これらのテーブルでblanck行を作成します新しいID ...?それはビルドの原因ですか?

しかし、ロガーでは、私は正しい値を見ました:params [:product_id] ...だから私は何を忘れましたか? :

class User < ActiveRecord::Base 
    has_and_belongs_to_many :products 
end 
class Product < ActiveRecord::Base 
    belongs_to :group 
    has_and_belongs_to_many :authors 
    has_and_belongs_to_many :users 
end 

答えて

0

代わりの

@user.products.build(params[:product_id]) 

を使用して、私はそれがあなたのためにトリックを行うかもしれないと思う

@user.product_ids << params[:product_id] 

を試してみてください。

モデルがあるの-s

+0

を働いたものです。ここでは私のために働いていたものです:@user = User.find(1)\t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t (のparams場合[:product_id]) \t \t \t @product = Product.find(paramsは[:PRODUCT_ID])@ user.products.includeない限り \t \t \t(@製品) \t \t \t \t @user?。製品<<ように見える\t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \tエンド \t \tエンド –

-1

これは私が実際に匹敵する何かをした私のため

@user = User.find(1)                               
if (params[:product_id]) 
    @product = Product.find(params[:product_id]) 
    unless @user.products.include?(@product) 
    @user.products << @product                          
    end 
end 
+0

@product必要以上のコード。ここで@productをインスタンス化する必要はありません。 @ user.product_ids.include?(params [:product_id])を除いて、@ user.product_ids << params [:product_id]のようなものを試してみてください。 – KenB