如何在sinatra中处理程序(路由)之间传递变量(没有flash,sessions,@@ class_variable或$ global_variable)?

时间:2012-10-12 22:36:53

标签: variables sinatra action

说你有:


get '/' do
  haml :index
end

get '/form' do haml :form end

post '/form' do @message = params[:message] redirect to ('/') --- how to pass @message here? end

我希望@message实例变量可用(传递给)" /"动作也是如此,所以我可以在haml视图中显示它。 如果不使用session,flash,@@ class_variable或db persistence,我该怎么做?

我只想传递值,就好像我正在处理方法之间传递值一样。

我不想使用会话Cookie,因为用户可以关闭它们,我不喜欢它是一个暴露于所有代码的类变量,我不需要db的开销。

由于

编辑:

这是另一个解释在rails中处理这个问题的简单方法的问题

Passing parameters in rails redirect_to

以下是关于我从论坛收集的主题的更多信息,这些信息在rails中有效,但根据我的经验,不在Sinatra中(但请查看它,因为我可能做错了):

  

如果您在action1结束时重定向到action2,只需追加即可   重定向结束的值:

my_var = <some logic>
redirect_to :action => 'action2', :my_var => my_var

在另一个用户建议的同一个线程上:

def action1
  redirect_to :action => 'action2', :value => params[:current_varaible]
end
def action2
 puts params[:value].inspect
end

来源:http://www.ruby-forum.com/topic/134953

这样的事情能在Sinatra中发挥作用吗?感谢

2 个答案:

答案 0 :(得分:3)

尝试

before do
  @message = params[:message]
end

@message应该可以在任何路线中使用

修改

post '/form' do
  @message = params[:message]
  #redirect to ('/') --- how to pass @message here?
  haml :index, locals: {msg: @message}
end

不要使用redirect,然后您可以传递locals哈希。在你的index.haml msg变量应该可用。

答案 1 :(得分:0)

我唯一想到的就是将内容塞入̀Thread.current[:variableName]中。我不主张这是最佳或安全的解决方案。特别是,一旦完成该哈希条目,就应将其删除/设置为nil。