form_tag操作无法在rails中运行

时间:2011-09-30 01:46:21

标签: ruby-on-rails forms osx-lion rubymine

我的application.html.erb中有这个表单。

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

我不明白为什么这会被定向到posts->create而不是posts->index

感谢。

2 个答案:

答案 0 :(得分:1)

对于每个动作的用途,你似乎有点混淆。以下是典型RESTful用法的快速摘要:

索引 - &gt;查看项目列表
新/编辑 - &gt;添加或编辑项目的表格
创建/更新 - &gt;控制器动作,其中创建/更新项目

您的路径文件未将您带入索引的原因是因为索引不是通常创建或更新帖子的操作。最好的方法是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的部分中,您可以在newedit或您需要操作系统中的帖子的任何其他位置访问该表单。

答案 1 :(得分:1)

基本上,Rails遵守并遵守“RESTful”Web服务架构。使用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 %>