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-koch和jdeseno):
@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)
写这个的更简单的方法是
@options = CustomOptions.new(params[:cust_options] || session[:cust_options])
Run Code Online (Sandbox Code Playgroud)
祝好运.
| 归档时间: |
|
| 查看次数: |
1047 次 |
| 最近记录: |