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

Rails嵌套路由下使用link_to传递参数及取值方法问询

解决嵌套路由下传递并获取ques_num参数的问题

嘿,你已经成功把参数传到URL里了,这步操作完全没问题!接下来咱们一步步搞定在控制器和视图里获取参数,以及把它存入@question.ques_num的事儿:

1. 在Questions控制器的new动作中获取参数并赋值

因为参数是通过URL的query string传递的,你可以用params[:ques_num]直接获取。不过要注意,URL里的参数默认是字符串类型,记得转成整数,同时做个存在性判断避免报错。代码示例:

def new
  # 先找到对应的Coin实例(嵌套路由必备)
  @coin = Coin.find(params[:coin_id])
  # 初始化关联的Question
  @question = @coin.questions.new
  # 获取ques_num参数并赋值,不存在的话可以设个默认值(比如1)
  @question.ques_num = params[:ques_num].to_i if params[:ques_num].present?
end

2. 在new视图中使用该参数

如果需要在页面上显示当前问题编号,直接调用@question.ques_num就可以了(当然也可以直接用params[:ques_num],但用模型属性更符合Rails的MVC逻辑)。比如:

<h4>Submit Answer for Question #<%= @question.ques_num %></h4>

3. 在create动作中确保参数被存入数据库

new动作只是初始化对象,真正保存数据是在create动作里,一定要把ques_num加入强参数列表,否则Rails会拦截这个参数,导致无法存入数据库。代码示例:

def create
  @coin = Coin.find(params[:coin_id])
  @question = @coin.questions.new(question_params)
  
  if @question.save
    redirect_to @coin, notice: 'Question submitted successfully!'
  else
    render :new
  end
end

private
def question_params
  # 把ques_num添加到允许的参数集合里,替换成你实际需要的其他字段
  params.require(:question).permit(:ques_num, :content, :其他字段名)
end

4. 可选:给参数加模型验证(更健壮)

为了确保ques_num只能是1-5的整数,你可以在Question模型里添加验证:

class Question < ApplicationRecord
  belongs_to :coin
  # 验证ques_num必须存在,且在1到5之间
  validates :ques_num, presence: true, inclusion: { in: 1..5 }
end

这样整套流程就完整啦,参数能正常传递、获取,最终也能存入数据库~

内容的提问来源于stack exchange,提问作者mattC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:37:20