2011-09-30 67 views
2

我在application.html.erb中有此表单。form_tag操作不在导轨中工作

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

我不明白这是为什么越来越指向posts->create而不是posts->index

谢谢。

回答

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 %> 
1

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

指数 - >查看项目的列表
新建/编辑 - >形式,其中项目添加或编辑
创建/更新 - >控制器动作项目被创建/更新

您的路线文件没有带您进入索引的原因是因为索引不是通常创建或更新帖子的操作。最好的方法是去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,或其它地方否则你需要在你的系统中操作一篇文章。

+0

我想打印关于职位的一些信息,这就是为什么我将其路由到索引。我想以'application.html.erb'的形式检索我使用的值,并根据逻辑设置逻辑打印一些帖子。 – Ava

+0

在这种情况下,将信息发送给'create',并在完成后将其路由到'index'。 – sscirrus

+0

它会自动执行,还是我需要明确提及? – Ava