如何在Ruby on Rails页面间传递course_id变量?
解决方案
1. 调整路由配置
首先在config/routes.rb中,给目标路由添加参数支持,确保能接收课程ID:
get 'home/complete_task/:course_id', to: 'home#complete_task', as: 'home_completeTask'
2. 修改视图链接,传递课程ID
把你原来的视图代码改成这样,通过路径参数将enrolment.course_id传递到目标页面:
<td><%= enrolment.course_id %></td> <td><%= link_to "Complete Course", home_completeTask_path(course_id: enrolment.course_id), class:"btn btn-dark" %></td>
点击链接后,课程ID会被包含在请求参数中。
3. 修正HomeController中的处理逻辑
Rails控制器的action不能定义自定义参数,必须从params哈希中获取传入的参数。替换你原来的courseComplete方法为:
def complete_task @cid = params[:course_id] # 这里可根据课程ID查询对应数据,比如: # @course = Course.find(@cid) # @modules = @course.modules # @tasks = @modules.map(&:tasks).flatten end
注意:Ruby/Rails惯例用小写蛇形命名变量,建议用@cid而非@Cid。
4. 在目标视图中使用参数
现在在app/views/home/complete_task.html.erb里,就可以用@cid或查询出的课程数据展示内容了,示例:
<h2>课程 <%= @cid %> 的任务列表</h2> <% if @course.present? %> <% @modules.each do |module| %> <h3><%= module.name %></h3> <ul> <% module.tasks.each do |task| %> <li><%= task.title %></li> <% end %> </ul> <% end %> <% end %>
原方法无效的原因
- Rails控制器action不支持自定义参数,你写的
courseComplete(cid)不符合框架规则,参数必须从params中获取。 - 原
link_to未传递任何参数,导致控制器无法拿到课程ID。 - 变量命名不符合Ruby惯例,虽不影响功能,但易造成混淆。
内容的提问来源于stack exchange,提问作者Rewi
相关产品推荐
相关产品推荐

