优雅的方式只传递rails redirect_to中的非null参数

时间:2016-08-31 05:12:56

标签: ruby-on-rails

我们如何在rails redirect_to方法中仅传递非null参数?

我知道我们可以通过以下方式将参数传递给redirect_to:

redirect_to :action => "action1", :foo => bar

是否有任何优雅/更好的方式来传递变量' bar'什么时候可能是零或空?

现在,我在检查redirect_to之前是否为空。但我觉得这可以用更优雅的方式完成。

if bar.blank?
    redirect_to :action => "action1"
else
    redirect_to :action => "action1", :foo => bar
end

3 个答案:

答案 0 :(得分:5)

创建带有可选参数的路线

get '/action1/(:foo)' => 'controller#action1'

然后像

一样使用它
redirect_to :action => "action1"

redirect_to :action => "action1", :foo => bar

了解更多信息http://guides.rubyonrails.org/routing.html#bound-parameters

答案 1 :(得分:1)

这里没有很好的选择,但也许其中一个可以激发一个想法:

args = { :action => "action1" }
args[:foo] = bar unless bar.blank?
redirect_to args
redirect_to { :action => "action1" }.tap do |args|
  args[:foo] = bar unless bar.blank?
end
redirect_to { :action => "action1" }.merge!(bar.blank? ? {} : { :foo => bar })

答案 2 :(得分:0)

尝试:

redirect_to :action => "action1", bar.blank? ? {} : :foo => bar