我在这里阅读了很多相关问题,但我仍然不了解如何执行以下操作: 我有一个"国家"我想创建一个选择表单,允许用户选择模型中的任何现有国家/地区,然后重定向到该国家/地区" show"页。
我的collection_select逻辑是:
<%= collection_select(:country, :country_id, Country.all, :id, :name, prompt: 'Select a Country') %>
<%= submit_tag "Find!", redirect_to (country.params[:id])%>
任何帮助将不胜感激!
答案 0 :(得分:0)
Rails使用MVC,因此所有逻辑都应该在模型中(瘦控制器,胖模型),你应该选择像你这样的国家@country = Country.find(params[:country_name])
。
然后在视野中它将是<%= submit_tag "Find!", redirect_to country_show_path(@country) %>
。如果我理解你的问题,那就是答案。
答案 1 :(得分: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 hash找到国家/地区:
class CountriesController < ApplicationController
def show
@country = Country.find(params[:country][:country_id])
end
end
答案 2 :(得分: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 / views / 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"