2017-09-19 2 views
-2

je une table de hachage et ont besoin d'utiliser l'année de la valeur d'une variable dans ce L'exemple est:Comment extraire la valeur de hachage dans Rails

2.2.4 :001 > @values_project 
=> [#<CustomValue id: 20367, customized_type: "Project", customized_id: 492, custom_field_id: 64, year: "2017">] 

et je dois l'année quand j'essaie @value_hash.year recevoir l'erreur

NoMethodError: undefined method `year' for 
#<ActiveRecord::Relation:0x0000000712fb18> 

Je ne comprends pas pourquoi

+1

@values_project [: année] – widjajayd

Répondre

1

@value_hash est pas un hash, c'est un ActiveRecord::Relation (comme les états d'erreur).

Dans votre exemple, @value_hash ne compte qu'un seul membre. Pour obtenir ce membre, qui est une instance de la classe CustomValue (! Qui est toujours pas un hash), vous pouvez faire:

custom_value = @value_hash.first 

Ensuite, pour obtenir l'année, vous pouvez faire:

custom_value.year 

Ou bien, vous pouvez le faire en un seul coup comme:

@value_hash.first.year 

ce qui est juste une façon détournée de dire exactement ce que dit Sachin R (vous devez donc accepter leur réponse).

1

Si vous essayez d'obtenir la valeur pour l'année clé et votre hachage est @values _project alors vous utilisez
@values_project[:year]

1

car il est un tableau d'objets utiliser comme

@values_project.each do |value_project| 
    value_project.year 
end 

ou

@values_project.first.year 
+0

Ce n'est pas * exactement * un "tableau d'objets". C'est un 'ActiveRecord :: Relation'. Mais, hé, je sais ce que vous dites. – jvillian