0

我在这里阅读了许多相关问题,但我仍然不明白如何执行以下操作:我有一个“国家”模型,我想创建一个选择表单,允许用户选择任何现有国家/地区在模型中,并被重定向到该国家的“显示”页面。

我的 collection_select 逻辑是:

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

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

任何帮助,将不胜感激!

4

3 回答 3

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
于 2014-09-22T17:59:48.830 回答
0

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

于 2014-09-22T17:45:44.867 回答
0

您将需要 SelectCountryController(或您用来接收所选国家/地区的任何控制器)和您的常规 CountryController。

选择国家控制器:

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"
于 2014-09-22T18:03:41.927 回答