1

假设你有:


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,因为用户可以关闭它们,我不喜欢它是一个暴露给所有代码的类变量,而且我不需要数据库的开销。

谢谢

编辑:

这是另一个问题,解释了在 Rails 中处理此问题的一种非常简单的方法

在 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 中工作吗?谢谢

4

2 回答 2

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变量中应该可用。

于 2012-10-13T05:47:29.570 回答
0

我能想到的唯一方法就是把东西塞进去̀Thread.current[:variableName]。我没有声称这是最好或安全的解决方案。特别是,一旦您完成该哈希条目,就应该删除它/将其设置为 nil。

于 2019-05-16T21:09:55.920 回答