Rails Newbie:Collection Select&控制器逻辑

时间:2014-09-22 17:40:06

标签: ruby-on-rails ruby-on-rails-4 collection-select

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

我的collection_select逻辑是:

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

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

任何帮助将不胜感激!

3 个答案:

答案 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"