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])%>
任何帮助,将不胜感激!
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
您将需要两个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"
我尝试过这种方法,它会构建选择菜单,但不会重定向到(country_id)路径。 – kongzi 2014-09-23 00:21:03
如果不是重定向,那肯定是,params [:country_id]不知道怎么回事。 – 2014-09-23 00:44:57
'country.params [:id]'它是什么? – IS04 2014-09-22 17:43:21
country.params [:id]只是country_id。 – kongzi 2014-09-23 00:05:50