如何检查值是否在值数组中找到

时间:2011-06-14 20:55:57

标签: ruby-on-rails ruby

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

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

任何建议都是最受欢迎的......谢谢。

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

4 个答案:

答案 0 :(得分:36)

您可以使用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)

答案 1 :(得分:3)

linkedpub.LPU_ID.in?(@associated_linked_pub.collect(&:id))

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

答案 2 :(得分:1)

@associated_linked_pub.collect(&:id).include?(linkedpub.LPU_ID)

答案 3 :(得分:1)

如果@associated_linked_pub是数组,请尝试

if @associated_linked_pub.include?(linkedpub.LPU_ID)