Действие form_tag не работает в рельсах - PullRequest
2 голосов
/ 30 сентября 2011

У меня есть эта форма в моем application.html.erb.

<%= form_tag(:action=>"index", :controller=>"posts") %>
  <p>
  // code here
  </p>

Я не понимаю, почему это направляется на posts->create вместо posts->index?

Спасибо.

Ответы [ 2 ]

1 голос
/ 30 сентября 2011

По сути, Rails наблюдает и подчиняется архитектуре веб-службы " RESTful ". В REST и Rails существует семь различных способов взаимодействия с сервером в отношении ресурса. С вашим текущим кодом указание действия формы в качестве индекса не имеет смысла: помощники по формам Rails могут либо POST, PUT, либо DELETE.

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

class PostsController < ApplicationController
...

def create
  @post = Post.new

  respond_to do |format|
  if @post.save
    format.html { redirect_to(:action => 'index') }
end
end

Хотя ваша форма будет выглядеть так:

<% form_for @post do |f| %>
  # put whatever fields necessary to create the post here
<% end %> 
1 голос
/ 30 сентября 2011

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

Индекс -> просмотреть список элементов
Новый / Редактировать -> форма, где элементы добавляются или редактируются
Создать / обновить -> действие контроллера, при котором элементы создаются / обновляются

Причина, по которой файл маршрутов не приводит вас к индексации, заключается в том, что индекс не является действием, в котором сообщения обычно создаются или обновляются. Лучший способ - это ОТДЫХАТЬ. Если у вас нет очень необычной ситуации, лучший способ настроить вашу систему - это примерно так:

# routes.rb
resources :posts

# application.html.erb (or better: posts/_form.html.erb).
<% form_for @post do |f| %>
<% end %>

# posts controller, whichever action you want to use
def new
  @post = Post.new
end

Поместив форму в частичную часть под названием form, вы можете получить к ней доступ в new, edit или в любом другом месте, где вам нужно манипулировать сообщением в вашей системе.

...