我正在解决的总体问题:
我对 Ruby 很陌生,正在为我的应用程序创建一个搜索方法,用户在该方法中搜索一个模型的名称 foo,它可能有许多该名称的实例,我们返回所有相关实例的结果另一个模型,天。但是,每个 foo 都有多个与之关联的 day 版本(总共可以关联 4 个不同的版本。我们通过 foo 显示这些版本,而 foo 将它们包含在布尔值中:include_in_standard、include_in_v1 等)。
我需要我的搜索方法来让我知道 foo 每天包含哪些版本,以便我可以相应地显示搜索结果。此外,只有特定的日子可供不同类型的用户使用。我已经得到它,以便我将模型中日期和版本的信息传递给控制器,但是,在控制器中,我无法获取当前用户可用的日期。
代码结构:
在 Day 的模型中,我有一个搜索方法,它返回以下内容:
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
在我的控制器中,我调用返回结果的搜索方法,并将其分配给控制器中的局部变量 results。我还有一组 current_user 可以访问的所有日期,available_days。
微目标:
我想获得一个集合或数组,它只是 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}]
不工作的错误/问题/代码:
我已经尝试在其他地方寻找有关如何做到这一点的想法,但我认为我没有编码词汇来描述我正在尝试做的事情。
我认为这会起作用,但它会在标记为 ** 的行上生成无法将符号转换为整数的错误(代码中没有。)
days_set=results[:days_set]
** new_days_set=days_set.keep_if{|day_hash| available_days.include? day_hash[:day]
问题:
如何在我的 days_set 中获取可用天数中的哈希值?
我一直遇到这个错误,Can't convert Symbol to Integer,比任何其他错误都多,至少每周一次,也许更多。我觉得这表明一些我不太理解的概念。你能告诉我这个概念是什么,以便我可以查找有关它的信息和/或指导我了解有关它的一些信息吗?我不知道我在寻找它叫什么,这使得它很难找到。
谢谢你。