1

Multipleがtrueに設定されたCollection_selectがあります

 #views/courses/new
<%=collection_select(:course, :department_id, Department.all, :id, :name, {},
:multiple =>true,:size => 8,:class=> "text")%>

私のモデルで

#deparment Model
has_many :courses
#Course Model
belongs_to :deparment

複数選択リストからコースに複数の部門が選択されている場合、この詳細がコーステーブルに保存されるような状況が必要です。私の現在の実装では、コースの最初に選択された部門のみが保存され、残りは破棄されます。どうすればこれを達成できますか。

def create
@course = Course.new(params[:course] || [])
if @course.save
  redirect_to courses_path, :notice => "Course Created Successfully"
else
  redirect_to new_course_path
  flash[:alert] = "Error Creating Course"
end
end

ありがとうございました

4

2 に答える 2

0

両方のオブジェクトに対して、Has And Belongs To Many(HABTM)アソシエーションが必要になります。これを見てください:

http://guides.rubyonrails.org/association_basics.html#the-has_and_belongs_to_many-association

于 2013-03-05T13:08:04.690 に答える
0

まず最初に..このような関連付けが必要です。

部門.rb

has_and_belongs_to_many :courses

course.rb

has_and_belongs_to_many :departments

そして、このようにビュー/コース/新規を持つことができます。

<%=text_field_tag :course_name)%>
<%=select_tag(:departments, options_from_collection_for_select(Department.all, :id, :name),:multiple =>true,:size => 8,:class=> "text")%>

作成アクションは次のようになります。

def create
  @course = Course.new(params[:course_name] || [])
  if @course.save
    params[:departments].split(',').each do |id|
      @course.departments << Department.find(id)
    end
    redirect_to courses_path, :notice => "Course Created Successfully"
  else
    redirect_to new_course_path
    flash[:alert] = "Error Creating Course"
  end
end

結合テーブルの移行

class CreateCoursesDepartments < ActiveRecord::Migration
  def change
    create_table :courses_departments do |t|
      t.integer :course_id
      t.integer :department_id

    end
  end
end
于 2013-03-05T13:49:31.733 に答える