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

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

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

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

当变量’bar’可能为零或空时,是否有任何优雅/更好的方法来传递它?

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

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

使用可选参数创建路由

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

然后像使用它一样

 redirect_to :action => "action1" 

要么

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

欲了解更多信息,请访问http://guides.rubyonrails.org/routing.html#bound-parameters

这里没有非常好的选择,但也许其中一个将有助于激发一个想法:


 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 }) 

尝试:

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