我有一个名为'评估':
的模型class Assessment < ApplicationRecord
has_many :assessment_students
has_many :students, through: :assessment_students
end
加入表是:
class AssessmentStudent < ApplicationRecord
belongs_to :student
belongs_to :assessment
end
还有另一种模式:
class Classroom < ApplicationRecord
has_many :classroom_students
has_many :students, through: :classroom_students
has_many :assessments
end
在show,html.erb的教室中,我有一个下拉列表,显示所有评估(从评估表生成)。
代码是:
<%= collection_select(:assessment :assessment_id, Assessment.all, :id, :assessment_name , :prompt => true) %>
项目的要求是:根据用户在show.html.erb页面中选择的评估,我们必须向所有学生显示分配给该特定评估的名称等详细信息。我已将此数据存储在连接表&#39; AssessmentStudent&#39;中。但是,我不知道如何将id从上面的collection_select传递给教室控制器。我有以下代码:
show.html.erb:
<%= collection_select(:assessment :assessment_id, Assessment.all, :id, :assessment_name , :prompt => true) %>
<div id="divResult">
<% @assessmentstudents1.each do |t| %>
<% t.assessment_students.each do |record| %>
<%= record.student_id %>
<% end %>
<% end %>
</div>
教室控制员:
def show
@assessmentstudents1 = Assessment.find(params[:assessment][:assessment_id]).preload(:assessment_students)
end
def classroom_params
params.require(:classroom).permit(:classroom_name, :classroom_year, :customer_id, :classroom_student, :student_ids => [])
params.require(:assessment).permit(:assessment_id)
end
答案 0 :(得分:0)
标签select
本身没有任何作用。所以有两种可能的选择。
第一个是将select
包裹在form
标记中,然后提交表单将导致请求。第二个是使用JavaScript编写处理程序,它将监听select
更改。
答案 1 :(得分:0)
我首先建议您更改应用程序的控制器结构。因为show
的{{1}}操作的责任应该是显示课堂的详细信息。当您想要显示评估的详细信息时,应由ClassroomsController
处理。
首先,我假设你的AssessmentsController
模型有一个Assessment
关联。然后我建议创建以下结构。
配置/ routes.rb中
belongs_to :classroom
应用程序/视图/教室/ show.html.erb
resources :classrooms
resources :assessments
应用程序/控制器/ assessments_controller.rb
<% @classroom.assessments.each do |assessment| %>
<%= link_to assessment_name, assessment_path(assessment) %>
<% end %>
应用程序/视图/评估/ show.html.erb
class AssessmentsController < ApplicationController
def show
@assessment = Assessment.find(:id)
end
end
因此,为了解释此处发生的情况,我们已配置路由以允许服务器响应将导致<h1>Students for <%= @assessment.assessment_name %></h1>
<% @assessment.students.each do |student| %>
<p><%= student.student_name %></p>
<% end %>
<h2>In classroom:</h2>
<p><%= @assessment.classroom.classroom_name %></p>
操作被调用的网址/assessments/:id
。
当用户点击我们在AssessmentsController#show
模板中设置的任何链接时,系统会调用该操作。请注意,我现在使用单独的链接而不是选择下拉列表,因为它更容易设置和理解它的工作原理。和之前的回答一样,使用select标签需要一些JavaScript才能正常工作。
最后,当呈现classrooms/show
模板时,它会列出与该特定任务相关的所有学生。而且我还包括分配到哪个教室(如果我对belongs_to的假设是正确的话)。
在旁注中,如果您的assessments/show
问号是正确的,则ruby-on-rails-3
和params.permit
的使用无效,因为这是Rails 4中引入的内容(除非我弄错了。)在任何情况下,您只需在发生数据库更新时使用params.require
,这意味着permit
和create
操作,而不是update
,index
,等等,因为它是一种限制允许更改的方式。