0

2 つのモデルがあります。それらの間にHABTM関連がある質問とカテゴリ。質問のカテゴリを編集できるフォームが欲しいのですが、方法がわかりません。私はこれから始めましたが、迷子になりました。「名前」属性などの名前と、質問で自動的に編集/作成される方法がわかりません。これを設定するにはどうすればよいですか?

<%= f.fields_for :categories do |categories_form| %>
        <%= categories_form.select "category_ids", Category.all.collect { |c| [c.description, c.id] }, {}, {:multiple => true, :size => 9} %>
    <% end %>

私はなんとか質問(has_many)を設定しました-> fields_forとaccepts_nested_attributes_forで答えましたが、これはできませんでした。

4

2 に答える 2

0

移行

テーブルの移行を作成する必要があります

関連付けの中間テーブルの移行を作成する必要があります + 関連付けによって作成される中間テーブル名は :categories_questions または :questions_categories です。2 番目のケースでは、リンクに示されているようにモデルで名前を定義する必要があります か? HABTM 結合テーブルの移行を手動で作成するには?

class CreateCategoriesQuestions < ActiveRecord::Migration
  def self.up
    create_table :categories_questions, :id => false do |t|
        t.references :category
        t.references :question
    end
    add_index :categories_questions, [:category_id, :question_id]
    add_index :categories_questions, [:question_id, :category_id]
  end

  def self.down
    drop_table :categories_questions
  end
end

質問モデル

class Question < ActiveRecord::Base
  has_and_belongs_to_many :categories
end

カテゴリ モデル

class Category < ActiveRecord::Base
  has_and_belongs_to_many :questions
end

コントローラースタッフ

question_controller.rb

def new
  @question = Question.new
  @question.categories.build #Build a categories_questions so as to use fields_for 
end  

フォームスタッフ

= f.fields_for :categories do |categories_fields|
  = categories_fields.text_field :name
  = categories_fields.text_field :description

ここで、新しいオブジェクトを作成するには、jquery を使用して html ブロッ​​ク名を適切に追加するか、(最終的には JavaScript を使用する) ヘルパーを作成して、新しいオブジェクトを追加することができます。オブジェクトと保存時に関連付けを保存します。次のリンクでは、誰かが正確な方法を示しました。

http://apidock.com/rails/ActionView/Helpers/FormHelper/fields_for#512-Setting-child-index-while-using-nested-attributes-mass-assignment

于 2012-08-08T14:25:43.370 に答える