在 kemal 视图中使用参数

Using params in view in kemal

我有一个简单的 ruby/sinatra 应用程序,我正在尝试迁移到 crystal/kemal。当用户提交表单选择时,sinatra 版本将参数作为散列

{"category"=>["selection1", "selection2",..]}

然后我通过 post 路由中的 render index.erb 将选择传递给视图。但是在 kemal 中我可以收集参数但无法弄清楚如何在视图中访问它们。我一直收到错误 undefined local variable or method.

如何让视图访问提交的参数?

这里是 post 路由的 sinatra 代码:

post '/' do
  if params.values.flatten.length < 1
    flash[:warning] = "Please choose at least one AED"
    redirect '/'
  else
    params
    erb :index
  end
end

和对应的kemal代码:

post "/" do |env|
  selected_drugs = env.params.body.fetch_all("drugs")
  if selected_drugs.size < 1
    env.flash["warning"] = "Please choose at least one AED"
    render "src/views/index.ecr"
  else
    selected_drugs
    render "src/views/index.ecr"
  end
end
Kemal.run

没有在所有使用 index.ecr 的路由中定义变量 holding params。一旦完成,它就起作用了。有趣的是,我不必在 sinatra 的某些路由中定义它。