2010-11-05 205 views
1

如何使用普通網址將參數傳遞給Rails應用程序?通過url傳遞參數

舉例來說,如果我有..

http://0.0.0.0:3000/lists/create/list[name]=Paul &列表[年齡] = 39 &列表[標籤] =雜項

所以我創建了一個名爲控制器列表和我想通過姓名,年齡和標籤..

在我的例子,我路過..

名=保羅 年齡= 39 標籤= misc

我粘貼上面的示例說,該項目已創建,但它添加的項目有空數據,表明我的格式不正確。

任何人都可以告訴我如何構造上面的URL來正確傳遞參數?

感謝 保羅

+0

你是怎麼發佈到0.0.0.0? – 2010-11-05 22:29:08

+0

嗯,這是我被告知連接到當我運行腳本/服務器時,默認地址,我也嘗試localhost:3000但仍然得到同樣的問題,這一切都在當地測試 – Azalar 2010-11-05 22:30:45

回答

3

默認情況下,導軌的REST路由禁止通過GET(常規URL)協議create行動。爲了您的具體的例子,你需要這個路由添加到你的config/routes.rb文件文件:

map.create_list 'list/create', :controller => 'lists', :action => 'create', :conditions => { :method => :get } 

這增加了一個路線create_list_pathcreate_list_url是通過GET的鏈接進行訪問,等用於創建網址列表中直接將是:

http://0.0.0.0:3000/lists/create?list[name]=Paul&list[age]=39&list[tag]=misc 

還要注意的是,如果你得到關於無效的真實性令牌錯誤,則可能需要將此行添加到您的控制器:

skip_before_filter :verify_authenticity_token, :only => :create 

對於更一般的情況下,可以配置同樣的路線和形式如下:

你需要在你的form_tag指定:method => 'get'

這在Ruby on Rails Form Helpers指南(搜索「通用搜索表單」)中進行了討論。

給出的基本代碼應該讓你開始是

<%= form_tag(search_path, :method => "get") do %> 
    <%= label_tag(:q, "Search for:") %> 
    <%= text_field_tag(:q) %> 
    <%= submit_tag("Search") %> 
<% end %> 

產生

<form action="/search" method="get"> 
    <label for="q">Search for:</label> 
    <input id="q" name="q" type="text" /> 
    <input name="commit" type="submit" value="Search" /> 
</form> 

GET S上的網址:http://my.server/search?q={query input}&commit=Search

+0

我真的沒有我自己的在這個階段形成,除了腳手架會產生什麼 – Azalar 2010-11-05 23:05:20

+0

在腳手架生成的表單中,您應該可以添加':method =>'get''來將參數放入url中。 – 2010-11-06 01:15:09

+0

有沒有這樣做沒有窗體,我最終希望能夠調用網址傳遞幾個參數,所以它不會使用窗體 – Azalar 2010-11-06 16:23:41