#ruby #json #hash
#ruby #json #хэш
Вопрос:
Я хочу, чтобы метод создавал следующую строку json во многих местах:
{"daily_calendar":{"search":{"print_date":"2014-06-30"}}}
У меня есть следующие четыре строки кода для создания хэша:
custom_params, print_date, search = Hash.new, Hash.new, Hash.new
print_date['print_date'] = @week_day
search['search'] = print_date
custom_params['daily_calendar'] = search
puts custom_params.to_json
Каков наилучший способ сделать это в одной или двух строках и использовать его в любом месте контроллера?
Комментарии:
1. В чем спешка при выборе ответа?
Ответ №1:
Просто пишите как есть:
hash = {daily_calendar: {search: {print_date:@week_day} } }
puts hash.to_json
Ответ №2:
Вы можете использовать хеш-литералы:
custom_params = {
"daily_calendar" => {
"search" => {
"print_date" => @week_day
}
}
}
Ответ №3:
{daily_calendar: {search: {print_date: @week_day}}}.to_json
Ответ №4:
Рекурсивное выражение позволяет вам иметь любое количество вложенных хэшей:
def doit(*h,v)
h.size == 1 ? { h.first => v } : { h.shift => doit(*h,v) }
end
h = %w[one_more_level daily_calendar search print_date]
doit(*h, 'tue')
#=> {"one_more_level"=>{"daily_calendar"=>{"search"=>{"print_date"=>"tue"}}}}