Правильный способ найти записи для определенного внешнего ключа - PullRequest
0 голосов
/ 22 сентября 2009

У меня есть две модели: Пользователь и Членство. Пользователь has_many: членство Членство принадлежит: пользователю

Как правильно изменить метод индекса MembershipsController, чтобы установить @memberships для всех членств, существующих для пользователя "session [: user_id]"?

Я пробовал что-то вроде: @memberships = Membership.find (: все,: условия => ["user_id =?", сессия [: user_id]])

но тогда Rails выбирает пользователей вместо членства:

Rendering memberships/index
  ←[4;35;1mUser Columns (3.0ms)←[0m   ←[0mSHOW FIELDS FROM `users`←[0m
  ←[4;36;1mUser Load (1.0ms)←[0m   ←[0;1mSELECT * FROM `users` WHERE (`users`.`id` = 1) LIMIT
  ←[4;35;1mCACHE (0.0ms)←[0m   ←[0mSELECT * FROM `users` WHERE (`users`.`id` = 1) LIMIT 1←[0m

Ответы [ 2 ]

0 голосов
/ 23 сентября 2009

Что означает session[:user_id]? Вы пытаетесь накатить свою собственную систему аутентификации?

Существует количество решений для аутентификации , которые могут обработать все входы и выходы этого для вас.

Чтобы ответить на ваш вопрос, вы, вероятно, захотите использовать ассоциации , которые вы установили между двумя моделями:

def index
  @user = User.find(session[:user_id])
  @memberships = @user.memberships if @user
end

Используя систему аутентификации всего приложения (независимо от того, была ли она создана вами или с помощью библиотеки), это, скорее всего, было бы упрощено до:

def index
  @memberships = current_user.memberships
end

, где current_user - это метод, определенный в ApplicationController, который возвращает текущего вошедшего в систему пользователя, а действие index имеет before_filter, который гарантирует, что пользователь вошел в систему.

0 голосов
/ 22 сентября 2009

user_id не был установлен правильно.

сценарий / консоль:

>> Membership.find(:first, :conditions => "user_id = 1")
=> nil

Журналы:

Completed in 19ms (View: 9, DB: 6) | 200 OK [http://localhost/memberships]
  [4;36;1mSQL (0.0ms)[0m   [0;1mSET NAMES 'utf8'[0m
  [4;35;1mSQL (0.0ms)[0m   [0mSET SQL_AUTO_IS_NULL=0[0m
  [4;36;1mUser Columns (2.0ms)[0m   [0;1mSHOW FIELDS FROM `users`[0m
  [4;35;1mSQL (0.0ms)[0m   [0mSHOW TABLES[0m
  [4;36;1mUser Load (0.0ms)[0m   [0;1mSELECT * FROM `users` WHERE (`users`.`id` = 1) [0m
  [4;35;1mMembership Load (1.0ms)[0m   [0mSELECT * FROM `memberships` WHERE (user_id = 1) LIMIT 1[0m
  [4;36;1mMembership Load (0.0ms)[0m   [0;1mSELECT * FROM `memberships` WHERE (user_id = 1) LIMIT 1[0m
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...