我正在使用 Carmen 和 carmen-rails 来进行基于 ajax 的 select-a-country、states-list-populates 设置。我或多或少地使用了他们演示中的代码,而且效果非常好。
除了:我想在几种表格中重复使用我的“地址”部分:订单表格、更新您的地址表格、更新客户地址表格,诸如此类。每个视图中的代码都是相同的。
该示例硬编码状态元素的名称,这对我不起作用。如果我在没有 AJAX 的情况下渲染它,我可以简单地将 FormBuilder 传递给部分,但这不是一个选项。
这是我的部分代码:
<li>
<label for="country">Country</label>
<div class="select-wrapper">
<%= address.country_select :country, {priority: %w(US CA GB), prompt: 'Please select a country'}, class: 'country-select' %>
</div>
</li>
<li>
<% if address.object.has_attribute? :address %>
<%= address.label :address, 'Address' %>
<%= address.text_field :address %>
<% else %>
<%= address.label :street, 'Street' %>
<%= address.text_field :street %>
<% end -%>
</li>
<li>
<%= address.label :city, 'City' %>
<%= address.text_field :city %>
</li>
<li>
<label for="province">Province/State</label>
<div class="select-wrapper">
<%= render partial: 'shared/subregion_select', locals: { parent_region: address.object.country } %>
</div>
</li>
<li>
<%= address.label :zip, 'Postal Code' %>
<%= address.text_field :zip %>
</li>
这是部分:
<div id="state_code_wrapper">
<% parent_region ||= params[:parent_region] %>
<% country = Carmen::Country.coded(parent_region) %>
<% if country.nil? %>
<em>Please select a country.</em>
<% elsif country.subregions? %>
<%= subregion_select(:order, :state_code, parent_region) %>
<% else %>
<%= text_field(:order, :state_code) %>
<% end %>
</div>
问题是subregion_select(:order, :state, parent_region)
-- :order 需要调整以支持 FormBuilder 将创建的任何内容。理想情况下,我希望它是f.subregion_select
,但我不知道f
通过 AJAX 传递什么。