Joh*_*ard 5 ruby parameters ruby-on-rails
有没有比以下代码更好的方法来检查items_attributes?我必须先检查params [:order],因为有时可能不存在,但我讨厌长条件的外观。
if params[:order] and params[:order][:items_attributes]
Run Code Online (Sandbox Code Playgroud)
Ruby 2.3的更新,现在可以使用dig方法
params.dig(:order, :item_attributes)
Run Code Online (Sandbox Code Playgroud)
您可以创建辅助方法,以便更轻松地使用嵌套哈希。在 lib 文件夹中创建 ruby_ext.rb 文件,并编写以下函数:
module RubyExt
module SafeHashChain
def safe(*args)
if args.size == 0 then self # Called without args ...
elsif args.size == 1 then self[args[0]] # Reached end
elsif self[args[0]].is_a?(Hash) then self[args[0]].safe(*args[1..-1])
else nil end # Reached end-value too soon
end
end
end
class Hash; include RubyExt::SafeHashChain; end
Run Code Online (Sandbox Code Playgroud)
之后,您可以对嵌套哈希调用安全方法,如下所示:
params.safe(:order,:items_attributes)
Run Code Online (Sandbox Code Playgroud)
它将返回 items_attributes 的值。如果 order 或 items_attributes 不存在,它将返回 nil。
| 归档时间: |
|
| 查看次数: |
1021 次 |
| 最近记录: |