将嵌套属性分配给build_object

时间:2016-10-28 06:39:31

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 ruby-on-rails-3.2

他们是否可以创建此哈希而不循环?

 {"0"=>{":comment_id"=>"52"}, "1"=>{":comment_id"=>"53"}, "2"=>{":comment_id"=>"15"}}

输出:

[{":comment_id"=>"52"}, {":comment_id"=>"53"}, {":comment_id"=>"15"}]

所以它可以执行:

@article = Article.new(article_params)
@article.build_comments([{:comment_id=>"52"}, {:comment_id=>"53"}, {:comment_id=>"15"}])

@article.save

2 个答案:

答案 0 :(得分:3)

只需使用, object.values

<强> object = {"0"=>{":comment_id"=>"52"}, "1"=>{":comment_id"=>"53"}, "2"=>{":comment_id"=>"15"}}

<强> object.values

<强> => [{":comment_id"=>"52"}, {":comment_id"=>"53"}, {":comment_id"=>"15"}]

要将密钥转换为符号,

<强> object.values.map { |x| x.class;x.inject({}){|memo,(k,v)| memo[k.gsub(':','').to_sym] = v; memo} }

O / P:

<强> [{:comment_id=>"52"}, {:comment_id=>"53"}, {:comment_id=>"15"}]

答案 1 :(得分:0)

试试这个,

a = {"0"=>{":comment_id"=>"52"}, "1"=>{":comment_id"=>"53"}, "2"=>{":comment_id"=>"15"}}
res = a.keys.map{|k,v| a.delete(k)}

希望这会对你有所帮助。