Rails新手:收藏选择和控制器逻辑

问题描述:

我已经阅读了许多相关的问题,但我仍然不明白如何执行以下操作: 我有一个“国家”模型,我想创建一个选择表格将允许用户选择模型中的任何现有国家,并将其重定向到该国家的“演出”页面。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

Rails使用MVC,所以所有的逻辑都应该在模型中(瘦身控制器,胖模型),你应该选择你的国家这样的@country = Country.find(params[:country_name])。 然后看看它会是<%= submit_tag "Find!", redirect_to country_show_path(@country) %>。如果我理解你的问题,这就是答案。

选择形式

创建降表单内上下:

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

您将需要两个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