そこで、質問モデルのカテゴリ モデルを作成しました。また、ポリモーフィック リレーションシップのタグ モデルを作成したので、1 つの質問に多くのカテゴリを含めることができ、1 つのカテゴリに複数の質問を含めることができます。
質問を作成してカテゴリを選択すると、その質問に関連付けられたカテゴリも保存されるプロセスを完了できません。フォームの送信とタグの作成の間に接続が失われているようです。
ここに私のモデルがあります:
question.rb
class Question < ActiveRecord::Base
has_many :tags, :as => :taggable, :dependent => :destroy
has_many :categories, :through => :tags
end
タグ.rb
class Tag < ActiveRecord::Base
belongs_to :taggable, :polymorphic => true
belongs_to :category
end
カテゴリー.rb
class Category < ActiveRecord::Base
has_many :tags, :dependent => :destroy
has_many :questions, :through => :tags, :source => :taggable, :source_type => 'Question'
end
質問形式:
<%= f.input :question, input_html: { class: 'form-control' }%> </div> <div class="form-group"> <%= f.input :category_ids, collection: Category.all, :input_html => {multiple: true, class: 'form-control' } %> </div> <%= f.fields_for :choices do |b| %> <div class="form-group"> <%= b.input :choice, input_html: { class: 'form-control' } %> </div> <% end %>
<%= f.button :submit, :class => "btn btn-primary"%>
質問コントローラー作成アクション
def create @question = current_user.questions.new(question_params)
respond_to do |format| if @question.save format.html { redirect_to @question, notice: 'Question was successfully created.' } format.json { render action: 'show', status: :created, location: @question } else format.html { render action: 'new' } format.json { render json: @question.errors, status: :unprocessable_entity } end end end
フォームを送信するとき、カテゴリ ID は次のように送信されます: "category_ids"=>["", "2", "3"]
ミッシングリンクは、そのようなメソッドを作成することだと思います
def create_tag (category_id, question_id)
t = Tag.new
t.taggable = Question.find(question_id)
t.category = Category.find(category_id)
t.save
end
しかし、これをどこに配置するのが最適なのか、作成アクションで接続して適切な関連付けを正常に作成する方法がわかりません。
また、このメソッドは 1 つのカテゴリしか作成しないため、カテゴリ ID をループして複数作成する必要があります。
ありがとう