在 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 的某些路由中定义它。
我有一个简单的 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 的某些路由中定义它。