我如何使用collection_select?

时间:2012-12-09 08:08:31

标签: ruby-on-rails ruby activerecord views controllers

我想使用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,以便我可以执行诸如显示课程名称和我正在尝试上传成绩的任务。 new.html.erb表单与“输入新成绩”相关联。

1 个答案:

答案 0 :(得分:1)

您应该在视图页面上创建表单以将params传递给控制器​​。

<强>视图/等级/ 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 -%>

<强>控制器/ grades_controller.rb

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

然后在 views / grades / new.html.erb 中,您可以使用@course.name来显示用户在上一页上选择的课程。