0

新しい2つの新しいモデルと単純なモデルの間にhas_and_belongs_to_many関係があることを知りたいと思います。製品には著者が多く、著者にはたくさんの製品があります。私が持っている製品のためのビューの一部の形式では、基本的なRoRアプリケーションのhas_and_belongs_to_manyリンクを保存

class Author < ActiveRecord::Base 
    has_and_belongs_to_many :products 
end 

class Product < ActiveRecord::Base 
    has_and_belongs_to_many :authors 
end 

私はこれを書いた

<p>Products</p> 
<%= collection_select(:product, :author_ids, @authors, :id, :name, :prompt => " ", :multiple => true) %> 

をしかし、私は、更新ボタンを押したときに、私は私ができるこの奇妙なメッセージが表示されます'Tは自分自身を解決:ProductsControllerの#更新中

NoMethodError 未定義のメソッドが `拒否':文字列

"1" のために0

Rails.root:/ home/stephane/www/HABTM アプリケーショントレース|フレームワークトレース|完全なトレース アプリ/コントローラ/ products_controller.rb:63:block in update' app/controllers/products_controller.rb:62:inアップデート」 要求

パラメータ: { "UTF8" => "AOE「 " "_method" => "置く"、 " authenticity_token "=>" 2> "2GlTssOFjTVZ9BikrIFgx22cdTOIJuAB70liYhhLf + 4 ="、 "product" => {"title" => "Letréordes Templiers"、 "original_title" => ""、 "number" => "1"、 "added_by" => ""、 "author_ids" => "1"}、 "コミット" => "アップデート製品"、 "ID" => "1"}

何が問題なの? product_idsに問題はありますか?私はインターネット上で "s"をpuしなければならなかったが、それが何を表しているのか分かりません....

authors_productsテーブルをキーにリンクする方法ドロップダウンメニューから返されますか? (ここでは「author_ids」=>「1」) Thx!

詳細情報: は、この情報に解決することができるが、それでも関係のない省:

collection_select("sales_agent", "customer_id", @customers, "id", "name") 

あなたはID属性とname属性を持つ顧客のモデルを持っていたと仮定すると、これは正確に生成しないだろう上記のコード。だから我々はcollection_select呼び出しに渡す値を見て:

  • 最初のパラメータは、コレクション(例えばsales_agent。)から一つの要素が含まれているモデルである
  • は次が参照モデルのフィールド名です
  • 次は、リストしたいアイテムのコレクションを含む変数です(例:@customers)
  • 次はoptionタグのvalue属性です(例:customer id)
  • 次はoptionタグの表示属性です(例えば。しかし、一瞬のリンクを、保存せずに、顧客名)

は、だから私は今

<p>Products</p> 
<%= collection_select(:author, :author_id, @authors, :id, :name, :prompt => " ", :multiple => true) %> 

を書き、それが働いていました...(のみ、通常のフィールドの更新が保存されている、あなたは別のモデルをHABTM関係のためauthor_productsと呼ば

+3

'update'アクションに' app/controllers/products_controller.rb'コードを投稿してください。 – Bohdan

答えて

2

:-(関係を持っていない?

あなたが何かをすることによって、別の移行を実行する必要がありますrails g model author_productとテーブルの2つのフィールドのみ含まれている必要があります。主キーがないことを確認してください

belongs_to :author 
belongs_to :product 

が好き

何か:

def self.up 
    create_table(:author_products), :id => false do |t| 
     t.references :author 
     t.references :product 
    end 
    end 
+0

はい、私はこの移行を行い、no:idのテーブルを持っています。私はt.referencesの代わりにt.integerだけを書きました。それは問題の原因ですか? –

+0

列の名前がauthor_idおよびproduct_idである限り、問題ありません。彼らは私が信じるアルファベット順でなければなりません。だから著者は製品の前に来なければならない。 – Dex

関連する問題