Rails: Форум имеет много тем, сохраняющих ассоциацию? - PullRequest
0 голосов
/ 23 февраля 2012

Во-первых, я могу ошибаться, поэтому сначала немного расскажу об истории.

Как видно из названия, я строю форум с нуля. Я думал, что это работает правильно; тем не менее, я немного не уверен, как обновить / сохранить объект форума из метода «создания» тем в его контроллере.

Что я пытался сделать: В методе «Новый» я отправил идентификатор форума через роутинг. Таким образом, на странице новой темы есть адрес, который выглядит так: «localhost: 3000 / new-topic / 1». Тот, который является идентификатором форума. В самом методе я пытаюсь прикрепить его к новому объекту темы.

@topic = Topic.new
@topic.forum = Forum.find(params[:id])

Мой метод создания затем пытается использовать этот форум.

@topic = Topic.new(params[:topic])
@topic.forum.topics << @topic #Simplified down.
if @topic.save
  @topic.forum.save
...

У меня такое чувство, что я поступаю неправильно. Я просматривал чей-то учебник, и они получили форум, вызвав params [: forum_id], но они не показали, что они сделали маршрутизацию, чтобы добиться этого.

Как мне сделать это правильно и / или как правильно все это маршрутизировать? Для записи, я планирую использовать этот же метод для ассоциации Topic => Post. Спасибо за любую помощь.

1 Ответ

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

Вы должны использовать вложенные маршруты REST:

# routes.rb
resources :forums do
  resources :topics
end

, это приведет к следующим маршрутам:

GET  /forums/:forum_id/topics/new # displays the form
POST /forums/:forum_id/topics     # creates the topic

и в контроллере вы должны использовать сборщики, у них есть несколько преимуществ, таких как безопасность, сохранение объема и т. д.:

def new
  @forum = Forum.find(params[:forum_id])
  @topic = @forum.topics.build

def create
  @forum = Forum.find(params[:forum_id])
  @topic = @forum.topics.build(params[:topic])
  if @topic.save
    ...

http://api.rubyonrails.org/classes/ActionDispatch/Routing/Mapper/Resources.html#method-i-resources

...