Rails: создать из двух страниц - PullRequest
0 голосов
/ 14 января 2011

Я очень новичок в Rails, так что, возможно, я просто упускаю "Rails-способ", но у меня есть модель, назовите ее Post. Я могу создать пост как на канонической странице posts/new, так и на другой странице, скажем home/index.

В home/index у меня есть form_for @post (немного отличается от значения в posts/new, но скажите, что я могу использовать частичное). Проблема в том, что в PostController.create я не могу передать вновь созданный объект @post обратно home/index (в случае ошибок), потому что:

  • если я не укажу страницу для отображения, она будет автоматически отображаться posts/new
  • я не знаю вызывающую страницу, чтобы перенаправить ее на нужную вызывающую страницу (posts/new или home/index)
  • , даже если бы я знал это (взломав реферер запроса или используя redirect_to :back), redirect_to не передает объекты обратно, так что @post пуст при вызове из home/index

Любая помощь? спасибо

EDIT

Возможно, возможным решением было бы получить вызывающий контроллер / действие из запроса и вернуть его обратно. Есть ли способ сделать это?

Ответы [ 3 ]

0 голосов
/ 14 января 2011

Чтобы получить страницу реферера, вы можете сделать скрытое поле с именем redirect. Вы можете использовать его в контроллере.

redirect_to params[:redirect] || posts_path

Вы пытались передать идентификатор сообщения в строке запроса на home/index

Например: /home/index?post_id=42

0 голосов
/ 14 января 2011

Вы можете узнать, кто вызвал вашу страницу, посмотрев на

request.referrer

Я не знаю, является ли это "рельсовым путем", но вот мое решение.

Вы можете добавитьмаршрут для

match home/index/(:id) => "home#index"

и перенаправить на него после создания Post.Тогда в вашем действии Home controllers index просто выполните

@Post = Post.find(params[:index]) if params[:index]

Ваше представление должно отображать сообщение, если @Post существует

Мне нравится этот подход, потому что он сохраняет всю логикугде это должно быть.Логика маршрутизации в контроллере и просмотр логики в представлениях.

0 голосов
/ 14 января 2011

Теоретически, вы можете достичь того, что пытаетесь сделать, проверив реферера:

def create
  @post = Post.new

  if @post.update_attributes(params[:post])
    # redirect as appropriate
  else
    render :action => case request.referer
      when new_post_path then "posts/new"
      when "/" then "home/index" # assuming that home/index is the root of the site
    end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...