2011-07-21 41 views
1

之前我在制作一个使用Sinatra的网站,一切都很顺利,或者直到我需要访问before块中的params[]散列。Sinatra/Rack params []在

基本上,我试图做到这一点:

before do 
    if params[:forum_id] 
    @forum = Forum.find(params[:forum_id]) 
    build_breadcrumbs(@forum.parents) 
    # ... more code, snipped to keep it short 
    end 
end 

但事实是,我不能调用params[]散在before块,没有任何人有什么想法?

我把这段代码放在before块中的原因是我宁愿不必去把它放在每个页面的每个getpost块中。

回答

6

从文档:

前置过滤器相同的 上下文内的每个请求之前评估为可能会出现路由和可以修改请求和响应。

由于这发生在实际请求之前,因此无法访问请求参数。你可以做的是把重复的代码放入一个方法中,并在你的路由块中调用它。

+1

你的文章给了我一个尝试'之前'/ f /:forum_id''(加上其他论坛页面)和工作的想法。谢谢 :)。 – Kliknik

+0

欢迎您,很高兴帮助! :-)为了将问题标记为已解决,您可以通过点击投票计数下的小勾号来接受此答案。这样其他用户知道你不需要任何帮助。只有在答案解决了你的问题时才这样做。 –

1

这不是真的了。我只是测试它。你现在可以在{...}之前访问参数