Что такое «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
Как я уже сказал, все работает нормально, я просто ищу более идиоматически Ruby способ написания этого блока кода.
Обновление
Вот так теперь выглядит мой код (спасибо henning-koch и jdeseno ):
@options = CustomOptions.new( params[:cust_options] || session[:cust_options] || {} )
Если я оставлю окончательное условие (|| {}
) за пределами этой строки кода, что произойдет в моем методе initialize
, когда не определены ни params [: cust_options], ни session [: cust_options] или оба nil
Мое initialize
определение выглядит так:
def initialize( options = {} )
# stuff happens ...
end