ruby-on-rails - 在 ruby 中,根据值从散列集选择一些散列

  显示原文与译文双语对照的内容
0 0

我正在解决的整体问题:

我非常新的ruby,用户搜索一个模型的NAME,它可以能有许多 NAME的实例,并返回它的他模型的结果。 但是,每个foo都有一天与它的关联的多个版本( 有 4个不同的版本可以以与。 我们通过foo来显示这些版本,foo以布尔值包含它们: include_in_standard,include_in_v1,等等 ) 。

我需要我的搜索方法,让我知道每天包含哪个版本 foo,以便相应地显示搜索结果。 同样,对于不同类型的用户,只有特定的天数。 我已经经把这些信息传递给控制器,但是在控制器中,我有问题。

代码的结构:

在模型中,我有一个返回以下内容的搜索方法:

results={:result_case=>result_case, :days_set=>days_set, :term0=>term0, :term1=>term1}

result_case是整数,term0和term1是字符串。

days_set是一个像这样形成的集合

days_set=Set.new
array_of_foo.each do |f|
 f.join_table_connecting_foo_and_days.days.each do |foo|
 days_set+={:day=>d, :standard=>f.include_in_standard, :v1=>f.include_in_v1, :v2=>f.include_in_v2, :v3=>f.include_in_v3, :v4=>f.include_in_v4}
 end
end
days_set

在控制器中,调用搜索方法返回结果,并将它的分配给控制器中的局部变量结果。 我还有一个 array的所有日子都可以访问 current_user,available_days 。

微目标:

我想获得一个集或者 array,它只是days_set中的哈希,它的中日期包含在available_days中。 也就是说如果我的days_set现在

[{:day=>d1, :standard=>true, :v1=>false, :v2=>false, :v3=>true, :v4=>true},
 {:day=>d2, :standard=>false, :v1=>true, :v2=>false, :v3=>true, :v4=>false},
 {:day=>d3, :standard=>false, :v1=>false, :v2=>false, :v3=>true, :v4=>true},
 {:day=>d4, :standard=>true, :v1=>true, :v2=>true, :v3=>true, :v4=>true},
 {:day=>d5, :standard=>false, :v1=>false, :v2=>false, :v3=>true, :v4=>false},
 {:day=>d6, :standard=>true, :v1=>false, :v2=>true, :v3=>false, :v4=>true}]
available_days=[d1, d3, d4]

那我想

[{:day=>d1, :standard=>true, :v1=>false, :v2=>false, :v3=>true, :v4=>true},
 {:day=>d3, :standard=>false, :v1=>false, :v2=>false, :v3=>true, :v4=>true},
 {:day=>d4, :standard=>true, :v1=>true, :v2=>true, :v3=>true, :v4=>true}]

不工作的Error/Problem/Code:

我尝试了解如何在它的他地方进行这项工作,但我不认为我没有编码词汇来描述。

这个函数的作用是:生成一个符号,不能将符号转换为整数( 在标记为 **的行上),而在代码中不存在。

days_set=results[:days_set]
** new_days_set=days_set.keep_if{|day_hash| available_days.include? day_hash[:day]

问题:

  1. 如何获取days_set中日期为available_days的哈希值?

  2. 这个错误,我不能把符号转换成整数,超过任何其他错误,至少一周,也许更多的是。 我觉得这表明了一些我不理解的概念。 你能告诉我这个概念是什么样的,我可以以查找信息和/或者指导我有关它的信息? 我不知道我在找什么,这样就难以找到它。

谢谢你。

时间:原作者:5个回答

0 0

要获得你的天子集:

new_days = days_set.select { |ds| available_days.include? ds[:day] }

这将给你一个 array 。 或者你可以在它上使用 .to_set 来获取一个集合:

new_days_set = (days_set.select { |ds| available_days.include? ds[:day] }).to_set

出现"无法将符号转换为整数"错误,因为你可以能试图比较某个符号,比如 :day 到整数值,例如 d1 。 或者如果 ds[:day] ( 哈希元素 ds的键 :day的值) 是一个符号,而你的available_days array 是整数的一个 array 。

原作者:
...