2015-04-08 4 views
0

То, что я пытаюсь сделать, это показать 2-буквенный аббревиатурный код стран, то есть «США».Использование жемчуга carmen с рельсами

После того, как страна выбрана, мне нужно показать ее штат или провинцию. , но у меня проблема.

Мой код выглядит

<%= 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.

+0

Вы хотите спросить, хотите ли вы иметь два 'selects' в HTML-форме. И выбор конкретной страны будет заполнять другой выбор субрегионами этой конкретной страны? –

+0

да, именно мне это нужно. – railslearner

+0

Но я не понял, почему помощник называется «only_us_and_canada» –

ответ

0

Я решил это путем:

Step1: Генерируется миграция

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 

Step4: Ввиду

<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> 

Step5: Сделайте частичную 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) 
    }); 

да и это работает :) Надеюсь, это поможет вам.

Смежные вопросы