0

Является ли их способ создать этот хеш не в цикле?Назначение вложенных атрибутов для build_object

{"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 
+0

пожалуйста, вы можете попробовать ниже строки кода. @ article.build_comments ([{": comment_id" => "52"}]). Build_entity –

+0

Вопрос не так ясен – yossico

ответ

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} }

о/р:

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

+0

@ on-the-way, просто используйте метод '.values'. – Sravan

+0

Это их способ сделать это как «[{: comment_id =>« 52 »}, {: comment_id =>" 53 "}, {: comment_id =>" 15 "}]' удаление двойных qoutes на ключ? –

+0

'object.values.map {| x | x.class; x.inject ({}) {| памятка, (K, V) | memo [k.gsub (':', ''). to_sym] = v; memo}} ' – Sravan

0

Попробуйте это,

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

Надеется, что это поможет.

+0

не так ли эффективный цикл? – David

+0

Функция карты намного лучше, чем цикл. –

+0

использует итерацию ... это петля .. что вы подразумеваете под этим лучше, чем цикл? – David

Смежные вопросы