根据翻译的名称选择记录

时间:2015-10-19 12:57:24

标签: ruby ruby-on-rails-4 rails-activerecord

当我执行Resource.all时,在ruby控制台上

它会给我以下内容:

[<Resource id:'...', name_translated:{"en"=>'vehicle',"fr"=>'véhicule'}> ...]

如何选择Resource.find_by_name_translated(&#34; vehicle&#34;)

2 个答案:

答案 0 :(得分:4)

这可行,但我认为这不是最有效的方式:

#app/models/resource.rb

def self.find_by_english_name(name)
  Resource.all.select do |resource|
    resource.name_translated['en'] == name
  end
end

如果您希望能够通过一种方法找到多种语言(默认为英语),请尝试以下方法:

def self.find_by_name(name, language = 'en')
  Resource.all.select do |resource|
    resource.name_translated[language] == name
  end
end

由于您正在使用Postgres,因此也可以按如下方式编写:

def self.find_by_name(name, language = 'en')
  Resource.where("name_translated ->> '#{language}' = '#{name}'")
end

答案 1 :(得分:1)

如果你的数据库不允许通过json字段查询,我会使用正则表达式查询:

<?php

$jsondata = file_get_contents('http://api.steampowered.com/ISteamUser/GetFriendList/v0001/?key=<api key>&steamid=<steamid>&relationship=friend');

$data = json_decode($jsondata, true);

foreach ($data['friendslist'] AS $d){
echo $d['friends'];
}

?>