Rails class 比较 - 如果 Class.children 包含另一个 Class.children 做

Rails class comparison - If Class.children include AnotherClass.children do

我希望是一个简单的问题。我有几个 classes - User 和 Recipe - 两者都通过 has-many-through 关系具有 'ingredients' 作为 children。我想 运行 进行比较,检查 User.ingredients 是否包含每个食谱的成分。

我认为一个简单的 'include?' 查询就可以解决这个问题,但在实施时 returning nil。感觉这是因为我将它应用于 class 而不是数组(尽管 User.ingredients return 不是数组?!),但不确定我应该如何调整它让它工作 - 我试过将项目转换为数组、提取 ID 等,但还没有任何工作。

非常感谢任何帮助!史蒂夫

控制器代码如下:

def meals
    @recipes = Recipe.all
    @user = current_user #from my user authentication
end

即使两者包含相同的成分,return 的(删节)视图也是零:

    <% @recipes.each do |recipe| %>
        <% if @user.ingredients.include?(recipe.ingredients) %>
          <!-- ... -->  
                <td>
                  <%= recipe.name %>
                </td>
        <% end %>
    <% end %>

还有一点 - 在控制台中对此进行测试,我注意到 运行ning .include?如果成分 ID 的顺序错误,它们将不匹配。这也需要解决吗?

你可以像这样比较两个数组:

a = [1,2,3]
b = [1,2]
c = [4,5]

a & b
#=> [1, 2]
a & c
#=> []
(a & c).empty?
#=> true

通过这种方式,您可以执行以下操作:

<% @recipes.each do |recipe| %>
    <% unless (@user.ingredients.pluck(:id) & recipe.ingredients.pluck(:id)).empty? %>
      <!-- ... -->  
            <td>
              <%= recipe.name %>
            </td>
    <% end %>
<% end %>

希望对您有所帮助...