【问题标题】:compare two elements of the same class instance variable in rails比较rails中同一个类实例变量的两个元素
【发布时间】:2013-05-22 10:37:07
【问题描述】:

这将是非常基本的,但我是 Rails 的新手,请帮忙。 我在名为@product 的类实例变量中有一些结果。我想比较两个产品结果。 @product 有几个 id。我想比较连续的id。这就是我想要做的。

<% @products.results.each do |result|
    bid=Brand.where("id=?",result.brand_id)
    bid1=Brand.where("id=?",result+1.brand_id)  %>
    <% if (bid==bid1) %>
       do something
    <% end %>
<% end %>

但我没有得到结果。请指导我哪里出错了。

【问题讨论】:

  • 您能否发布定义或解释一下您的ProductResultBrand 模型之间的关系?
  • @amesee products.results 有许多brand_id,例如 1、23、23、20 等。我想一次比较两个brandid。由于我使用 products.each 如何比较两个结果?例如在第一次迭代期间从上面的代码bid = 1。在同一迭代中,我想将出价与出价 1(存储下一个品牌 ID 的变量。在本例中,出价 = 23)进行比较。如何做到这一点??

标签: ruby-on-rails arrays compare


【解决方案1】:

从您的代码中很不清楚您要做什么,但是有很多事情是错误的。一个一个:

如果您想在视图中执行所有这些操作,您还需要将 ERB 标签 &lt;% %&gt; 添加到第 2 行和第 3 行,否则它们不会被解释为 ruby​​ 代码,只会打印为html.

在您的视图中包含这么多逻辑通常不是一个好主意 - 如果需要,最好在模型甚至控制器中进行比较。

result+1.brand_id 会抛出错误,因为 '1' 没有方法 'brand_id'。大概你想做result.brand_id + 1

你可以用Brand.find(result.brand_id)代替Brand.where("id=?",result.brand_id)

【讨论】:

  • products.results 有许多brand_id,例如 1、23、23、20 等。我想一次比较两个brandid。由于我使用 products.each 如何比较两个结果??
【解决方案2】:

您可以使用“包含?” ruby 方法代替

只需将所有 id 存储在数组中,然后如示例所示执行以下操作:

a = [ 1, 2, 3 ]
a.include?(1)   #=> true
a.include?(4)   #=> false

更多详情请点击以下链接:

http://apidock.com/ruby/Array/include%3F

【讨论】:

    【解决方案3】:

    试试这个

    <% arr = @products.results.all %>
    <% arr.shift %>
    <% @products.results.each_with_index do |result,i| %>
        <% bid=result.brand %>
        <% if (bid==arr[i]) %>
           do something
        <% end %>
    <% end %>
    

    【讨论】:

      【解决方案4】:

      首先将你的结果放入一个数组中,所以可能在控制器中是这样的:

      @results = @product.results
      

      然后在视图中:

      <% @results.each_with_index do |result, index|
        <% if result.brand_id == @results[index.next].brand_id %>
          # do something
        <% end %>
      <% end %>
      

      【讨论】:

        猜你喜欢
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-11
        相关资源
        最近更新 更多