как перебрать коллекцию и найти что-то в рельсах - PullRequest
2 голосов
/ 26 января 2010

Я новичок в рельсах и рубине.

У меня есть связь has_many между пользователем и магазином

ниже то, что я делаю:

@user = User.find_by_userid_and_password("someuser", "12345")
=> #<User id: 1, userid: "someuser", password: "12345", 
created_at: "2010-01-25 00:00:00", updated_at: "2010-01-25 00:00:00"> 
@user.stores
=> [#<Store id: 3, store_id: 3, store_name: "New Store 2", 
created_at: "2010-01-25 00:00:00", updated_at: "2010-01-25 00:00:00">, 
 #<Store id: 5, store_id: 5, store_name: "Store 14th and M", 
 created_at: "2010-01-25 00:00:00", updated_at: "2010-01-25 00:00:00">]

так что в основном я сначала аутентифицирую пользователя, а затем получаю все магазины, к которым принадлежит пользователь. За это я получаю список обратно. В этом списке хэшей я хочу узнать, есть ли что-нибудь с store_id == 4.

последовательно я делаю:

@user.stores.first.store_id==4
false
@user.stores.second.store_id==4
false

как я могу сделать это в цикле? и есть ли лучший способ сделать это.

1 Ответ

6 голосов
/ 26 января 2010

Добро пожаловать в Rails,

Ваш лучший подход здесь, вероятно, состоит не в том, чтобы использовать цикл, а в цепочке поиска к первому искателю.

Например:

@user.stores.find(store_id)

Это будет использовать БД и будет намного быстрее.

Проверьте API

Если вы хотите зациклить, вы делаете что-то вроде следующего

@user.stores.each do |store|
  @my_store = store if store.id == store_id
end

или

@my_store = @user.stores.select{|s| s.id == store_id}

или

@contains_store = @user.stores.include?{|s| s.id == store_id}

Удачи,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...