Передача идентификатора родительского ресурса в действие создания из формы - PullRequest
1 голос
/ 30 января 2011

У меня есть Forum, у которого много Topic с. Мои маршруты следующие:

GET  /forums/:forum_id/topics/new => Topics#new
POST /topics                      => Topics#create

Здесь начинается моя проблема:

= form_for @topic do |topic_form|

Эта форма соответствует маршруту POST /topics. * forum_id должен быть предоставлен, чтобы сохранить тему. Он доступен для действия new, но я не могу найти способ передать его в действие create.

Я попытался изменить маршруты на:

GET  /forums/:forum_id/topics/new => Topics#new
POST /forums/:forum_id/topics     => Topics#create

Но теперь forum_id оказался вне хеша параметра темы:

{ topic: { title: "Test" }, commit: "Create Topic", forum_id: 1 }

Как мне решить эту проблему?

1 Ответ

2 голосов
/ 30 января 2011

Я думаю, что самый правильный способ - это маршрутизировать, как вы сделали во втором примере. А затем в действии создания вы можете сначала создать экземпляр форума, чтобы убедиться, что он действителен, а затем создать тему из форума. Это может выглядеть примерно так:

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

Предполагается, что модель вашего форума имеет_many: themes

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