我想使用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表单与“输入新成绩”相关联。
答案 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
来显示用户在上一页上选择的课程。