目前,我正在开发一个关于Ruby on Rails的Customer项目,该项目要求提供诸如用户名,名字,姓氏,街道1,街道2,城市和州的信息。在这个项目中,城市和州应该选择具有来自城邦宝石的填充条目的框。
我在我的Gemfile中键入gem 'city-state'
,然后在终端(Mac OS)中运行bundle install
。
现在在我的表单文件中_form.html.erb
:
<%= form_for(@customer) do |f| %>
<% if @customer.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@customer.errors.count, "error") %> prohibited this customer from being saved:</h2>
<ul>
<% @customer.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :username %><br>
<%= f.text_field :username %>
</div>
<div class="field">
<%= f.label :first_name %><br>
<%= f.text_field :first_name %>
</div>
<div class="field">
<%= f.label :last_name %><br>
<%= f.text_field :last_name %>
</div>
<div class="field">
<%= f.label :street1 %><br>
<%= f.text_field :street1 %>
</div>
<div class="field">
<%= f.label :street2 %><br>
<%= f.text_field :street2 %>
</div>
<div class="field">
<%= f.label :state %><br>
<select id="states-of-country" name="state">
<option value="" selected="">Select Your State</option>
<% CS.states(:us).each do |key, value| %>
<option value="<%= key %>"><%= value %></option>
<% end %>
</select>
</div>
<div class="field">
<%= f.label :city %><br>
<select id="cities-of-state" name="city">
<option value="" selected="">Select Your City</option>
</select>
</div>
<script>
$('#states-of-country').change(function () {
var input_state = $(this);
var cities_of_state = $("#cities-of-state");
if ($(this).val() == "") {
cities_of_state.html("");
} else {
$.getJSON('/cities/' + $(this).val(), function (data {
// cities_of_state.empty();
var opt = '<option value="" selected="">Select Your City</option>';
console.log(data);
if (data.length == 0) {
} else {
data.forEach(function (i) {
opt += '<option value="+ i +">' + i + '</option>';
cities_of_state.html(opt);
});
}
});
}
});
</script>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
错误集中在CS.states(:us)
然后当我运行服务器时,每次去创建或编辑客户时,都会收到此错误:
许可被拒绝 - / Library/Ruby/Gems/2.0.0/gems/city-state-0.0.13/lib/db/states.us
PS。在我的gem文件中输入gem 'city-state'
之前,我首先在终端中执行了此操作:sudo gem install 'city-state'
答案 0 :(得分:0)
这是因为系统ruby中的文件权限和gem是root用户的安装程序。快速解决方法是chmod
/ chown
/Library/Ruby/Gems/2.0.0/gems/
。
但更好的方法是使用像rbenv
或rvm
这样的ruby版本管理器,以便您有一个单独的ruby安装。 RVM甚至提供“gemsets”功能 - 这样您就可以为每个项目提供隔离的gem环境。
答案 1 :(得分:0)
我遇到同样的问题,这个解决方案对我有用:
$ gem哪个城邦
- &GT; /Users/macbook/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/city-state-0.0.13/lib/city-state.rb
$ sudo chown -R $(whoami)/Users/macbook/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems / *