【问题标题】:How would I check if a value is found in an array of values如何检查是否在值数组中找到值
【发布时间】:2011-09-15 01:19:46
【问题描述】:

我想执行一个 if 条件,如果在值数组 (@associated_linked_pub) 中找到 linkedpub.LPU_ID,则执行一些操作。

我尝试了以下,但语法不正确。

欢迎任何建议..非常感谢

<% for linkedpub in Linkedpub.find(:all) %>
   <% if linkedpub.LPU_ID IN @associated_linked_pub  %>
       # do action
   <%end%>
<%end%>

【问题讨论】:

标签: ruby-on-rails ruby


【解决方案1】:

您可以使用Array#include?

所以...

if @associated_linked_pub.include? linkedpub.LPU_ID
  ...

编辑

如果 @associated_linked_pub 是 ActiveRecord 对象的列表,请尝试以下操作:

if @associated_linked_pub.map{|a| a.id}.include? linkedpub.LPU_ID
  ...

编辑

更详细地查看您的问题,看起来您正在做的事情非常低效且不可扩展。相反,您可以这样做...

对于 Rails 3.0:

Linkedpub.where(:id => @associated_linked_pub)

对于 Rails 2.x:

LinkedPub.find(:all, :conditions => { :id => @associated_linked_pub })

Rails 会自动创建一个 SQL IN 查询,例如:

SELECT * FROM linkedpubs WHERE id IN (34, 6, 2, 67, 8)

【讨论】:

    【解决方案2】:
    @associated_linked_pub.collect(&:id).include?(linkedpub.LPU_ID)
    

    【讨论】:

      【解决方案3】:

      如果@associated_linked_pub 是一个数组,试试

      if @associated_linked_pub.include?(linkedpub.LPU_ID)
      

      【讨论】:

        【解决方案4】:
        linkedpub.LPU_ID.in?(@associated_linked_pub.collect(&:id))
        

        在这些情况下使用in? 对我来说总是更自然。

        【讨论】:

        • 能否提供文档链接?
        猜你喜欢
        • 2018-09-09
        • 1970-01-01
        • 2022-11-23
        • 1970-01-01
        • 2011-01-27
        • 1970-01-01
        • 1970-01-01
        • 2021-05-28
        相关资源
        最近更新 更多