You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 20:10:46