2011-04-25 38 views
0

我想在我的web應用程序的索引頁上做一個表單。現在,我有一個名爲home_controller.rb的控制器和一個名爲index.html.erb的視圖。這兩個人現在處理我網站的「索引」。我也試圖向該頁面添加一個表單。的index.html.erb內容是:簡單的導軌形式的用例幫助

<%= form_tag(query_path, :method => "get") do %> 
    <%= submit_tag("Go!") %> 
<% end %> 

然而,鐵軌給我這個錯誤,當我加載頁面:

未定義的局部變量或方法 `query_path」

這裏是我的想我想要發生:我想home_controller.rb中的另一個行動,這被稱爲query(現在是唯一的行動在這個控制器我s index)。這個query動作是當你點擊「Go!」時從我的表單中調用的動作。我如何做到這一點?什麼需要在那裏而不是query_path

編輯:

我覺得必須有一個簡單的答案,而不是修改routes.rb文件。我如何錯誤地思考這個路由業務?在我的腦海中,我的頁面上的任何操作都應默認爲現有頁面的控制器。因此,如果我在我的index.html.erb頁面上,該頁面屬於我的home_controller.rb,我的:action => 'query'應該默認查找我的home_controller.rb中的操作。 爲什麼這不會發生?這正是我想要發生的事情。

也許我正在考慮這是完全錯誤的方式,這就是爲什麼我們一起黑客解決方案。這就是我想要的:我希望用戶點擊一個按鈕,這會導致應用程序查詢外部API,獲取一些JSON並顯示JSON的內容。在我的腦海中,這意味着按鈕轉到另一個操作,在同一個控制器中查詢外部API,並將JSON傳遞迴顯示在完全相同的頁面上(所有這些都使用Ajax)。我以錯誤的方式接近這個問題嗎?

+0

什麼版本鐵軌是這樣的嗎? – 2011-04-25 04:43:42

+0

3.0.7(#FILLERTEXTISANNOYING) – sepiroth 2011-04-25 04:45:57

回答

1

看起來你需要做的是在config/routes.rb中添加一個路由。您可以使用rake routes查看您當前的路線名稱。一個例子航線低於

# Will create query_path mapping to home.query action 
match 'home/query' => 'home#query', :as => :query 

編輯

你需要明確定義,是因爲Rails3中不會默認爲`[控制器]/[動作]」通配符映射。不推薦使用RESTful控制器。如果您想再次啓用此功能,您可以在routes.rb中取消註釋,但不推薦這樣做。

0

首先,您可能需要一個帖子而不是get。表單將如下所示:

<%= form_tag query_path do %> 
    ... (your form elements here) 
    <%= submit_tag "Submit" %> 
<% end %> 

您指定的query_path是命名的路由。對於你的情況,你需要這樣的路線。RB:

scope :path => '/home', :controller => :home do 
    post 'query' => :query, :as => 'query' 
    end 

編輯:

如果這確實是一個GET方法,只需添加:方法=> 「獲取」 的形式和路徑更改爲:

scope :path => '/home', :controller => :home do 
    get 'query' => :query, :as => 'query' 
    end 
+0

你爲什麼假設他想要一個post請求? – 2011-04-25 04:50:20

+0

基於他的問題,我認爲使用post請求會更自然。但是,如果這確實是一個獲得,他可以保持:方法得到。這只是我的假設,這就是爲什麼我認爲這很可能,當然不確定:)但讓我編輯我的帖子,以更好地說明。 – Spyros 2011-04-25 04:52:33