如何从params或session中分配值,以哪个存在?

irk*_*der 0 ruby ruby-on-rails

执行以下操作的"Rails-way"或"Ruby-way"是什么:

在我的控制器中,我正在创建一个Options类的实例.如果params散列存在,它将使用params散列中的信息进行初始化.否则,它将检查会话哈希以获取信息.最后,如果params和session都没有所需的数据,它将使用默认值进行初始化.这是我现在正在做的事情(它工作正常,但看起来有点难看):

if params[:cust_options]
  @options = CustomOptions.new( params[:cust_options] )
else
  if session[:cust_options
    @options = CustomOptions.new( session[:cust_options] )
  else
    @options = CustomOptions.new
  end
end

session[:cust_options] = @options.to_hash
Run Code Online (Sandbox Code Playgroud)

就像我说的,一切都运行正常,我只是在寻找一种更加惯用的Ruby方式来编写这段代码.


更新

这就是我的代码现在的样子(感谢henning-kochjdeseno):

@options = CustomOptions.new( params[:cust_options] || session[:cust_options] || {} )
Run Code Online (Sandbox Code Playgroud)

如果我离开最后一个条件(|| {})离开那行代码,initialize当我的方法中既没有定义params [:cust_options]也没有定义session [:cust_options],或两者都是nil

我的initialize定义如下:

def initialize( options = {} )
  # stuff happens ...
end
Run Code Online (Sandbox Code Playgroud)

tri*_*ine 5

写这个的更简单的方法是

@options = CustomOptions.new(params[:cust_options] || session[:cust_options])
Run Code Online (Sandbox Code Playgroud)

祝好运.