2014-09-22 58 views
0

我已經閱讀了許多相關的問題,但我仍然不明白如何執行以下操作: 我有一個「國家」模型,我想創建一個選擇表格將允許用戶選擇模型中的任何現有國家,並將其重定向到該國家的「演出」頁面。Rails新手:收藏選擇和控制器邏輯

我collection_select邏輯是:

<%= collection_select(:country, :country_id, Country.all, :id, :name, prompt: 'Select a Country') %> 

<%= submit_tag "Find!", redirect_to (country.params[:id])%> 

任何幫助,將不勝感激!

+0

'country.params [:id]'它是什麼? – IS04 2014-09-22 17:43:21

+0

country.params [:id]只是country_id。 – kongzi 2014-09-23 00:05:50

回答

0

Rails使用MVC,所以所有的邏輯都應該在模型中(瘦身控制器,胖模型),你應該選擇你的國家這樣的@country = Country.find(params[:country_name])。 然後看看它會是<%= submit_tag "Find!", redirect_to country_show_path(@country) %>。如果我理解你的問題,這就是答案。

0

選擇形式

創建降表單內上下:

<%= form_tag countries_path, method: :get do %> 
    <%= collection_select(:country, :country_id, Country.all, :id, :name, prompt: 'Select a Country') %> 
<%= submit_tag %> 

在這種情況下,我打contries_path和我指定的GET請求。表格選定的值將被傳遞給CountriesController#show

後到控制器

你可以找到全國各地,用傳遞給表單的值,可通過params哈希:

class CountriesController < ApplicationController 
    def show 
    @country = Country.find(params[:country][:country_id]) 
    end 
end 
+0

嘗試了這個,但我得到一個錯誤 - 「未定義的方法'[]爲零:NilClass」 - 錯誤在控制器行:@country = Country.find(params [:country] [:country_id]) – kongzi 2014-09-22 19:25:25

+0

'params'有什麼嗎?嘗試打印出'params'並查看是否有任何內容用於'country'或'country_id' – 2014-09-22 19:39:43

+0

參數: {「id」=>「1」} – kongzi 2014-09-22 19:59:18

0

您將需要兩個SelectCountryController(或任何控制器,你」重新使用接收選定的國家)和常規CountriesController。

SelectCountryController:

class SelectCountryController < ApplicationController 
    def index 
    if params[:country_id].present? 
     redirect_to country_path(params[:country_id]) 
    end 
    end 
end 

選擇國家視圖(app /視圖/ select_country/index.html.erb)

<%= form_tag "", method: :get do %> 
    <%= collection_select(:country, :country_id, Country.all, :id, :name, prompt: 'Select a Country') %> 
    <%= submit_tag "Find!" %> 
<% end %> 

國家控制器:

class CountriesController < ApplicationController 
    def show 
     @country = Country.find(params[:id]) 
    end 
end 

不要忘記以確保您的routes.rb文件中包含正確的路線:

resources :countries 
get :select_country, to: "select_country#index" 
+0

我嘗試過這種方法,它會構建選擇菜單,但不會重定向到(country_id)路徑。 – kongzi 2014-09-23 00:21:03

+0

如果不是重定向,那肯定是,params [:country_id]不知道怎麼回事。 – 2014-09-23 00:44:57