使用带有铁轨的卡门宝石

时间:2015-04-08 10:56:14

标签: ruby rubygems ruby-on-rails-4.1

我要做的是显示国家的2个字母的缩写代码,即' US'。

选择国家后,我需要显示其州或省。 但我遇到了问题。

我的代码看起来像

<%= f.select :country_code, region_options_for_select(only_us_and_france) %>

并在帮助器中定义:

def only_us_and_france
    Carmen::Country.all.select{|c| %w{US FR}.include?(c.code)}
end

我使用的是Rails 4.1.0。

1 个答案:

答案 0 :(得分:0)

我通过以下方式解决了这个问题:

第1步:生成迁移

rails g migration addStateCodeFieldToAccounts state_code:string

第2步:在控制器内定义方法

def subregion_options
    render partial: 'subregion_select'
end

第3步:在路线中声明

resources :accounts do
    collection do
      get 'subregion_options'
    end
  end

第4步:在视图中

<div class="input-control select state_input" data-role="input-control">
   <%= f.select :country, region_options_for_select(only_us_and_france) %>
</div>
<div class="input-control select state_input" data-role="input-control">
  <%= render partial: 'subregion_select', locals: {parent_region: f.object.country} %>
</div>

第5步:制作部分subregion_select

<div id="account_state_code_wrapper">
  <% parent_region ||= params[:parent_region] %>
  <% country = Carmen::Country.coded(parent_region) %>

  <% if country.nil? %>
    <em>Please select a country above</em>
  <% elsif country.subregions? %>
    <%= subregion_select(:order, :state_code, parent_region) %>
  <% else %>
    <%= text_field(:order, :state_code) %>
  <% end %>
</div>

Step6:在我的js文件中写这个

 $('select#account_detail_country').change(function(){
    selectWrapper = $('#account_state_code_wrapper')
    countryCode = $(this).val()
    url = "/account_details/subregion_options?parent_region="+countryCode
    console.log(url)
    selectWrapper.load(url)
  });

是的,它的确有效:)希望这会对你有帮助。