рельсы HABTM присоединяются и неудобства - PullRequest
0 голосов
/ 23 февраля 2010

У меня есть рабочая ассоциация HABTM между моделями

Сообщений и пользователей ... Таблица posts_users такая же, как рекламируется, и обе имеют необходимые has_and_belongs_to_many в своей модели. Rb

И если яиспользуйте User.find(1).posts, он найдет все сообщения с действительным именем пользователя

Мой вопрос заключается в том, как справиться с этой ситуацией.

Я хочу использовать

user.posts.find(1234) илина самом деле из контроллера эквалайзер:

current_user.posts.find(params[:id])

Чтобы защитить себя от других пользователей, прыгающих вокруг.Однако это использование имеет некоторые странные результаты.Это работает, но вместо того, чтобы id являлся действительным идентификатором для определенного поста или всех постов, он возвращает идентификатор 1, а не, скажем, реальный из 1234. Так что дальнейшие объединения, такие как:

user.posts.find(1234).comments

не работают или являются недействительными.

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

user.posts.all.first работает и возвращает правильный идентификатор !, но использование первого не очень полезно.user.posts.all.find(6933) возвращает #<Enumerable::Enumerator:0x105343630>

Также пробовал различные комбинации с (:post_id => 1234), возвращая id всегда 1.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 23 февраля 2010

Это наиболее вероятно, потому что ваша таблица соединения posts_users имеет столбец идентификатора. В вашей миграции ваша таблица соединения должна выглядеть так:

create_table :posts_users, :id => false do |t|
  t.references :posts
  t.references :users
end
0 голосов
/ 23 февраля 2010

Как насчет пользователя имеет много комментариев через сообщения. Тогда что-то вроде user.comments.find (: все,: условия => {: post_id => 1234}

...