2011-09-30 79 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