#ruby-on-rails #activerecord
#ruby-on-rails #activerecord
Вопрос:
Я только что попытался выполнить метод, и он потерпел неудачу после попадания на определенный объект.
Зная атрибут email этого объекта, как я могу создать массив и ограничить возврат только теми объектами, которые находятся после этого конкретного объекта?
Это проект Rails 2
Ответ №1:
Я бы сказал:
your_array.take_while {|elt| elt.email != email }
Или для 1.9.2:
your_array.slice_before{|elt| elt.email == email }.first
Комментарии:
1. Hmm..is это метод rails 3? Я должен отметить, что я использую Rails 2
2.
.take_while
работает отлично! Боже, ты настоящий гений ruby, раз знаешь эту маленькую жемчужину.3. действительно здорово взглянуть на все сокровища модуля Enum 🙂
Ответ №2:
если у вас есть массив, попробуйте что-то вроде
irb(main):030:0> ary = [ 1, 2, 3, 4, 5, 6, 7 ]
=> [1, 2, 3, 4, 5, 6, 7]
irb(main):031:0> ary.values_at( ary.index(4)..-1 )
=> [4, 5, 6, 7]
Ответ №3:
Это может помочь, так как where вернет все записи после id == id
id = SomeModel.where( :email => 'email_you@kn.ow' ).first.id
SomeModel.where( "id > ?", id )
Комментарии:
1. Так завидую Rails 3 прямо сейчас, потому что это вопрос Rails 2. Спасибо за ответ, хотя!