所有。我正在关注carmen-rails文档,虽然我使用的是rails4,但在选择国家时我无法让州子区域工作。事实上,当离开子区域代码时,我甚至无法导航到该站点。我收到这个错误:
localhost:3000
Processing by OrdersController#new as HTML
Rendered orders/_subregion_select.html.erb (1.9ms)
Rendered orders/_form.html.erb (773.3ms)
Rendered orders/new.html.erb within layouts/application (775.8ms)
Completed 500 Internal Server Error in 784ms
ActionView::Template::Error (undefined method `downcase' for nil:NilClass):
1: <div id="order_state_wrapper">
2: <% parent_region ||= params[:parent_region] %>
3: <% country = Carmen::Country.coded(parent_region) %>
4:
5: <% if country.nil? %>
6: <em>Please select a country above</em>
app/views/orders/_subregion_select.html.erb:3:in `_app_views_orders__subregion_select_html_erb__937058573181156642_69893053026600'
app/views/orders/_form.html.erb:100:in `block in _app_views_orders__form_html_erb__3775537416523760398_69893046471120'
app/views/orders/_form.html.erb:1:in `_app_views_orders__form_html_erb__3775537416523760398_69893046471120'
app/views/orders/new.html.erb:6:in `_app_views_orders_new_html_erb__3931135682021831649_69893046299220'
看起来不像(国家,在这种情况下为“US”)参数从父区域传递,因为它是“nil”。有任何见解让这个工作(我假设使用rails4)?
应用程序/视图/命令/ _form.html.erb
<div class="control-group">
<div class="field">
<%= f.label :country, 'Country' %>
<%= f.country_select :country, priority: %w(US CA), prompt: 'Please select a country' %>
</div>
<div class="field">
<%= f.label :state %><br />
<%= render partial: 'subregion_select', locals: {parent_region: f.object.country} %>
</div>
</div>
应用程序/视图/命令/ _subregion_select.html.erb
<div id="order_state_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, parent_region) %>
<% else %>
<%= text_field(:order, :state) %>
<% end %>
</div>
app / assets / javascripts / orders.js.coffee
# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://coffeescript.org/
$ ->
$('select#order_country').change (event) ->
select_wrapper = $('#order_state_wrapper')
$('select', select_wrapper).attr('disabled', true)
country = $(this).val()
url = "/orders/subregion_options?parent_region=#{country}"
select_wrapper.load(url)
config / routes.rb
get '/orders/subregion_options' => 'orders#subregion_options'
#rake routes
Prefix Verb URI Pattern Controller#Action
orders_subregion_options GET /orders/subregion_options(.:format) orders#subregion_options
当直接浏览到子区域路线并指定国家/地区时:
http://localhost:3000/orders/subregion_options?parent_region=%22US%22
Started GET "/orders/subregion_options?parent_region=%22US%22" for 192.168.122.1 at 2013-07-08 13:20:21 -0400
Processing by OrdersController#subregion_options as HTML
Parameters: {"parent_region"=>"\"US\""}
DEPRECATION WARNING: Relation#first with finder options is deprecated. Please build a scope and then call #first on it instead. (called from service at /usr/local/rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/webrick/httpserver.rb:138)
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 ORDER BY "users"."id" ASC LIMIT 1
Rendered orders/_subregion_select.html.erb (0.2ms)
Completed 200 OK in 4ms (Views: 1.3ms | ActiveRecord: 0.2ms)
答案 0 :(得分:1)
gem carmen-rails未在http://ready4rails4.net/上注册,在其编写的github页面上
carmen-rails是一个Rails 3插件,它提供了两种新的表单帮助方法:country_select和subregion_select。
加上travis-ci.org https://travis-ci.org/jim/carmen-rails所有版本都使用rails 3.2完成。
我想说宝石可能不是Rails 4准备就绪。
您应该在github页面上打开一个问题。
在查看了你的评论后,我检查了你正在使用的分支,除了分支名称,我没有看到任何与Rails 4相关的提交。
看一下changelog文件(https://github.com/freerunningtechnologies/carmen-rails/blob/master/CHANGELOG.md)让我觉得rails 4的兼容性还没有完成,但也许我错了。
答案 1 :(得分:0)
我在Rails 3.2.15应用程序上遇到了同样的错误。为了让它起作用,我不得不对卡门宝石进行一次小改动。按照这些说明你应该是金色的:
bundle open carmen
打开Carmen gem库。lib/carmen/querying.rb
。将第15行替换为以下内容:
code = code.try(:downcase) # Codes are all ASCII
我已经向原作者提交了拉取请求,因此很快就会在主分支中修复,但在此之前您可以执行上述操作,或者您可以在gemfile中使用my fork,如下所示:
gem 'carmen', github: 'joshuapinter/carmen'
答案 2 :(得分:0)
想出导致错误的事情我也跑了。
<div id="order_state_code_wrapper">
<% parent_region ||= params[:parent_region] %>
<% unless parent_region.nil? %>
<% country = Carmen::Country.coded(parent_region) %>
<% end%>
<% 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>
您需要添加此项以删除错误
<% unless parent_region.nil? %>
<% country = Carmen::Country.coded(parent_region) %>
<% end%>
除非在页面加载时第一次使用parent_region是nil那个时间
并从网址和路由中移除 / orders ,因为它没有调用控制器操作subregion_options并使用subregion_options作为id
修改了网址和路由
url = "/subregion_options?parent_region=#{country}"
get '/subregion_options' => 'orders#subregion_options'