Как бы проверить, найдено ли значение в массиве значений

Я хочу выполнить условие 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%>

Ответы

Ответ 1

Вы можете использовать Array#include?

Итак...

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

Edit

Если @associated_linked_pub - это список объектов ActiveRecord, попробуйте вместо этого:

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

Edit

Глядя на ваш вопрос более подробно, похоже, что вы делаете ОЧЕНЬ неэффективно и нецелесообразно. Вместо этого вы можете сделать...

Для 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

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

Использование in? в этих случаях всегда казалось мне более естественным.

Ответ 3

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

Ответ 4

если @associated_linked_pub - массив, попробуйте

if @associated_linked_pub.include?(linkedpub.LPU_ID)