построить отношения из списка идентификаторов - PullRequest
0 голосов
/ 04 августа 2010

Привет, у меня есть has_and_belongs_to_many отношение между сообщениями и комментариями, и в моем действии редактирования у меня есть форма, которая возвращает мне список идентификаторов 1,3,5,8 и т. Д. Я хочу построить отношения между моей текущей моделью и всеми моделями, идентификаторы которых есть в списке поэтому @post.comments вернет Комментарии с 1,3,5,8 идентификаторами

На самом деле мне нужно выполнить

DELETE FROM comments_posts
WHERE post_id = @post.id

INSERT INTO comments_posts VALUES 
(1,@post.id)
(3,@post.id)
(5,@post.id)
(8,@post.id)

или сделать что-то подобное

Ответы [ 2 ]

1 голос
/ 04 августа 2010
params[:list] ||= []                # Create an empty array if form is empty
@posts.comment_ids = params[:list]  # Recreate comment associations

См. Также Railscast о флажках HABTM .

0 голосов
/ 04 августа 2010

Может быть, вы ищете что-то вроде этого.

list = params[:list].join(',') # Assumes space separated to begin with
@posts.comments.find(:conditions => ["id IN (?)", list])

ОБНОВЛЕНИЕ

В стороне : я удивлен HABTM отношения в вашем приложении.Вы действительно имеете в виду, что пост может иметь много комментариев и комментарий может принадлежать многим постам?Конечно, комментарий относится только к одному сообщению, не так ли?

Тем не менее, я считаю, что вы можете добиться того, что вы ищете, следующим образом (используя ваши примеры):

@post.comments.destroy_all

@post.comments.create(...)

Это просто основныеассоциации в ActiveRecord

...