0

collection_selectを使用したいのですが、適切なオブジェクトのコレクションを含むドロップダウンメニューを表示するためにいくつかの調査を行い、選択した特定のオブジェクトを選択できるようにしました。しかし、そこから私はそれを渡す方法がわかりません。

これは私のコードです:

    <%= collection_select :course, :course_id, Course.all, :id, :name, :prompt => "Select a Course:" %>
    <%= link_to 'New Grade', new_grade_path(:course => :course_id ) %>

これは、コントローラーの「new」メソッドに渡す正しい方法ですか?

そして、私がコントローラーにいる場合、これはそのオブジェクトを取得するための正しいコードですか?

    @course = Course.find(params[:course])

また、これをビュー'new.html.erb'に表示する場合、このコードを使用しますか?

    <%= @course.name %>

編集:

私は自分の協会を含めることが役立つかもしれないと思いました:

  class Grade < ActiveRecord::Base
    belongs_to :course
    belongs_to :task
    belongs_to :student
  end       

  class Course < ActiveRecord::Base
    has_many :students, :dependent => :destroy
    has_many :grades
    has_many :tasks, :through => :grade
    has_many :teams
  end

  class Task < ActiveRecord::Base
    belongs_to :course
    has_many :grades
    has_many :categories
    has_one :eval
  end

私がやりたかったのは、views / grades / index.html.erbページにドロップダウンメニューを作成して、ユーザーがコースとそのコースのタスクを選択できるようにすることでした。ユーザーが[新しい成績を入力]をクリックすると、ドロップダウンメニューでユーザーが選択したパラメータをviews/grades / new.html.erbに渡して、コースの名前や成績をアップロードしようとしているタスクを新しいものに表示するなどの操作を実行できるようにします。 'inputnewgrades'にリンクされているhtml.erbフォーム。

4

1 に答える 1

1

パラメータをコントローラに渡すには、ビューページにフォームを作成する必要があります。

views / grades / index.html.erb

<%= form_tag(new_grade_path, method: 'get') do %>
  <%= label_tag "Courses" %>
  <%= select_tag(
    :choose_course,
    options_from_collection_for_select(Course.all, "id", "name")
  ) %>
  <%= submit_tag "Choose course" %>
<% end -%>

controllers / grades_controller.rb

def new
  @course  = Course.find(params[:choose_course])
end

次に、views / grades / new.html.erb@course.nameで、ユーザーが前のページで選択したコースを表示するために使用できます。

于 2012-12-09T08:50:55.523 に答える