Rails формируют перенаправления для новых / создания, редактирования / обновления - PullRequest
3 голосов
/ 01 февраля 2011

Я использую Rails 2.3.8

У меня проблема с действиями, которые отображаются после ошибки в форме.

Итак, у меня есть posts контроллер и обычные связанные действия, index, new, create, edit, update и show.

Вот действия с формами в PostsController:

def new
  @post = Post.new
  # other setup
end

def create
  if request.post?
    @post= Post.new(params[:post])
    # other setup for save
    if @post.save
      flash[:notice] = 'Post was successfully created.'
      redirect_to campaign_path(@post, :redirect => "create")
    else
      render :action => 'new'
    end
  end 
end

def edit
  @post = Post.find(params[:id])
  # other setup
end


def update
  # setup for save
  if @campaign.update_attributes(params[:post])
    flash[:notice] = 'Your post was successfully updated.'
    redirect_to :action=> "index"
  else
    render :action => "edit"
  end
end

А вот и формы в видах

new.html.erb

<% form_for(@post, :html => {:multipart => true}) do |f| %>
  <%= f.error_messages %>
  # Form fields and stuff
  <%= f.submit "Create New Post" %>
<% end %>

edit.html.erb:

<% form_for(@post, :html => {:multipart => true}) do |f| %>
  <%= f.error_messages %>
  # Form fields and stuff
  <%= f.submit "Update This Post" %>
<% end %>

Моя проблема : если я на странице new и я делаю какую-то ошибку (например, оставляю поле пустым), представления, которые отображаются, отправляются в неправильное место. Так что, если я начинаю с new и отправляю безуспешно кучу раз, он последовательно проходит через new, затем create, затем edit, затем update действия. Итак, поведение таково:

Начните создавать сообщение:

Действие: new
URI: /posts/new
Представлено: new
Успешная отправка отправляется на: show
Неудачная отправка отправляется на: create

После первой неудачной отправки:

Действие: create
URI: /posts плохо?
Представлено: new
Успешная отправка идет по адресу: index (это означает, что форма отправляется на действие update, bad )
Неудачная отправка отправляется на: edit плохо

После второй неудачной отправки:

Действие: edit плохо , я не смогу попасть сюда с new!
URI: /posts/[id]
Представлено: edit плохо , я не смогу попасть сюда с new!
Успешная отправка отправляется по адресу: index через обновление
Неудачная отправка отправляется на: update

После третьей и последующих неудачных отправок:

Действие: update плохо , я не смогу попасть сюда с new!
URI: /posts/[id]
Представление выполнено: edit плохо , я не смогу попасть сюда из new!
Успешная отправка отправляется на: index
Неудачная отправка отправляется на: update

Буду признателен, если кто-нибудь укажет мне, что я делаю неправильно. Если вам нужна дополнительная информация, просто спросите.

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 01 февраля 2011

Возможно, проблема в коде, который вы используете для создания своего поста (# setup для сохранения). Вы, вероятно, устанавливаете @ post.id, который заставляет вашу новую форму отправлять обновление вместо создания. Помощник form_for проверяет, является ли запись новой или нет, если она новая, то она отправляет на создание, если она уже существует, она отправляет на обновление.

Примечание: Вам также не нужно проверять request.post? на вашем действии создания. Действие создания всегда должно быть почтовым запросом.

0 голосов
/ 01 февраля 2011

Как ваши маршруты выглядят для этого?

И, как сказал Пан, нет необходимости в этом request.post?, особенно без else для захвата, если это не post?

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