Sinatra CRUD路由每个型号,路线问题

时间:2012-05-01 05:08:21

标签: ruby sinatra routes

这是我使用我的代码的地方,我认为我很接近。

savetomongoid是一个将params数组推送到mongoid的def。

我正在使用activesupport用于复数和分类方法

route :get, :delete, :post, :put, '/*/*?/?*?' do |model, action, id|
  case
  when request.get?
    case action
    when "new" 
      haml '#{model}/new'
    when "show" 
      instance_variable_set('@#{model}', model.classify.find(id))
      haml '#{model}/show'
    when "edit" 
      instance_variable_set('@#{model}', model.classify.find(id))
      haml '#{model}/edit'
     else
      instance_variable_set('@#{model.pluralize}', model.classify.asc(made))
      haml '#{model}/index'
    end
  when request.post? || request.put?
    savetomongoid(model, params[model]) ? (redirect '/#{model}/') : (redirect '/#{model}/new')
  when request.delete?
    model.classify.find(id).delete ? (redirect '/#{model}/') : (puts "uhh ohh")
  end
end

get '/*' do
  haml :silence
end

当我尝试用任何路径加载它时,我得到一个完全空白的屏幕,没有源,但是localhost:#### /带我到我的haml:沉默所以一些路由正在工作。

三个splats应该把它的价值放入模型,动作,id。我尝试了某些东西/某些东西,我仍然得到无源页面。

假设splats和问号的模式通过https://github.com/sinatra/sinatra

上的自述文件起作用

任何人都可以帮我一把吗?我几乎可以肯定这应该有效。

此外,是否有人可以建议一种方法来检查模型是否存在以过滤掉模型中任意事物的生成过程?

1 个答案:

答案 0 :(得分:0)

您的案例陈述看起来很奇怪。

您正在测试request_method的结果,它将返回字符串“GET”,“PUT”,“POST”或“DELETE”对照请求的 get?,post?或者删除? 返回 true false 的方法。

好像你总会在没有匹配的情况下拒绝案件陈述。

应该是:

  

route:get,:delete,:post,:put,'/ / ?/?*?' do | model,action,id |
      case request.request_method
      什么时候“GET”
      ...