【发布时间】:2019-01-08 10:47:28
【问题描述】:
大家好,我目前正在设计一个注册表单,最终目标是用户可以从美国选择一个州,下面的选择标签将填充该州的正确城市。我正在使用城邦宝石。 https://github.com/loureirorg/city-state
我查看了类似这样的其他示例https://forum.upcase.com/t/dependent-country-city-state/7038我的代码在下面
routes.rb
resources :states, only: :new
registrations.new.html.erb
<div class="field">
<%= f.select :state, options_for_select(CS.states(:us)), {:prompt => "State"}, {:class => "signup-input-container--input", :id => "state-picker"} %>
</div>
<div class="field">
<%= f.select :city, options_for_select([]),{}, {:class => "signup-input-container--input", :id => "city-picker"} %>
</div>
main.js
document.addEventListener("turbolinks:load", function(){
var state = document.getElementById("state-picker");
state.addEventListener("change", function() {
Rails.ajax({
url: "/states?country=" + "United States" + "&state=" +
state.value,
type: "GET"
})
})
});
registrations-controller.erb
def new
super
@cities = CS.get(:us, params[:state])
end
new.js.erb
var city = document.getElementById("city-picker");
while (city.firstChild) city.removeChild(city.firstChild);
var placeholder = document.createElement("option");
placeholder.text = "Choose a city";
placeholder.value = "";
city.appendChild(placeholder);
<% @cities.each do |c| %>
city.options[city.options.length] = new Option('<%= c %>');
<% end %>
我试图让它按照示例链接显示的方式工作。唯一的区别是用户只会从美国和城市中选择州
【问题讨论】:
-
出了什么问题?你已经描述了你做了什么,但没有描述什么是行不通的。您是否发现 JavaScript 错误?服务器端错误?你有任何错误吗?
-
感谢@philnash 的快速回复我没有收到任何错误,当我从下拉列表中选择一个州时,城市选择标签中没有填充任何内容
-
你的 JavaScript
change事件会触发吗? -
是的,它会在控制台“GET localhost:3000/states?country=UnitedStates&state=Arizona 404 (Not Found)”中触发并拍摄它
-
啊,好的,所以我们有一个 404。
rails routes说明您请求状态的端点在哪里?我看到您将其作为注册控制器中new操作的一部分?那是最好的地方吗?
标签: ruby-on-rails ruby