Sinatra 正在看一套 Sinatra 的教程,看到一半卡壳了,希望大侠帮帮我

sphawkcn · 2012年08月16日 · 最后由 dingyiming 回复于 2015年12月10日 · 5500 次阅读

正在看一套 sinatra 的教程,看到一半卡壳了,一直没有解决,希望大侠帮帮我。问题在这里:

这是 get 方法对应的处理器:

get '/' do @tasks = Task.all slim :index end

这是 index.slim 网页模版:

form action="/" method="POST" input type="text" name="task[name]" input.button type="submit" value="New Task >>" h2 My Tasks ul.tasks

这是 post 方法对应的处理器:

post '/' do @task = params[:task] slim :task end

我不理解的就是 params[:task] 里面的:task 从何而来?POST 方法提交上来的是"task[name]",而不是“task”,这里怎么会出现:task 呢?

希望大侠能不吝赐教,谢谢了。附原教程地址:http://blogs.ejb.cc/archives/2840/first-met-sinatra-2#comment-412

呵呵,你可以看 params[:task] 是一个什么东东,puts params[:task].inspect 一下,他应该是个 hash,包含了 name 这个 key

翻 sinatra 的源码吧,在 base.rb 里面对 rack request 的 params 做了处理

匿名 #3 2012年08月17日

这个,如果你会 rails,就比较容易理解了。。。

谢谢各位大侠指点,好像没有一个是正面回答啊,其实我是小菜鸟来的,rails 还没学,听说 sinatra 简单点,就先从 sinatra 入手了。源码对于我来说是目前还处于天书状态。

#4 楼 @sphawkcn POST 表单里面的 task[name] 字段和值会自动转换为一个 Hash {:task => {:name => value}},params 这个方法就用来访问这个 Hash。

#5 楼 @Rei 懂了懂了,谢谢兄弟,原来有这个魔法在里面,这两天我是想破脑袋都想不出是啥原因。拜谢

@sphawkcn 同学,在看那个教程的第 2 篇时,出现一个问题,就 redirect '/',一直不也能够 get 数据,不知道你遇到没有?

#7 楼 @Daniel_Xu 那个翻译后的教程有问题,我在教程后面的评论里跟译者说了,他遗漏了一些东西,你可以看那篇教程后面我的评论。建议直接找英文原版看,那个是对的。

#8 楼 @sphawkcn 支持看英文原版

@sphawkcn 建议你看 sinatra 里面的源代码,它对 params 进行了一个转换。http://stackoverflow.com/questions/8619707/accessing-sinatra-params-using-a-symbol

@Daniel_Xu 官网的文档那么简洁为何要去看别的呢?

谢谢学习了
需要 登录 后方可回复, 如果你还没有账号请 注册新账号