Я пытаюсь создать динамическое меню, поэтому, когда пользователь выбирает страну, меню состояния обновляется.Если вы знаете, как заставить JSON работать с Rails 3.2, вы можете понять это?
Я смотрю мои журналы журналов dev и вижу, что действие запускает запрос db, а затем отображает файл json.erb, но я не могу получить ответ от браузера.
Вот что у меня есть:
Контроллеры/settings_controller.rb
respond_to :html, :json
def getstates
@states = Country.find_by_iso(params[:account][:addresses_attributes]["0"][:country]).states
respond_with(@states)
end
(Примечание: Форма вложенная форма, именно поэтому PARAMS хэш так долго.)
Настройки/edit.html.erb
<%= address.collection_select :country, Country.order(:name), :iso, :name, {:include_blank => true}, "data-remote" => true, "data-url" => "/settings/getstates", "data-type" => :json %>
<%= address.select :state, [], {:include_blank => true}, :disable => true %>
настройки/getstates.json.erb
$(document).ready(function() {
$("#account_addresses_attributes_0_country").bind('ajax:success', function(evt, data, status, xhr){
var select = $('#account_addresses_attributes_0_state');
if (data !== null) {
select.removeAttr('disabled');
$.each(data, function(key, value) {
$("<option/>").val(value[1]).text(value[0]).appendTo(select);
});
} else {
select.empty();
select.attr('disabled', 'disabled');
}
});
});
(Примечание: Я получил этот код из http://blog.madebydna.com/all/code/2011/12/05/ajax-in-rails-3.html)
Dev регистрирует
Processing by SettingsController#getstates as JSON
Parameters: {"account"=>{"addresses_attributes"=>{"0"=>{"country"=>"UY"}}}}
User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", "1"]]
Country Load (0.2ms) SELECT "countries".* FROM "countries" WHERE "countries"."iso" = 'UY' LIMIT 1
Rendered settings/getstates.json.erb (0.3ms)
Completed 200 OK in 3ms (Views: 1.5ms | ActiveRecord: 0.3ms)
Это результат, который я вижу в своих журналах dev. Но ничего в браузере. Я попытался добавить предупреждения и методы консольного журнала, но ничего.
Я был бы очень признателен, если бы кто-нибудь мог помочь мне понять, что я делаю неправильно.
Сладкий, это сработало! Мне пришлось изменить URL-адрес, чтобы включить параметры, необходимые для действия контроллера, чтобы найти состояния, но он вернул набор объектов JSON на консоль! Следующий вопрос ... как мне получить к ним доступ сейчас? По крайней мере, я хотел бы видеть их в представлении точно как проверка, но в идеале я хочу вставить их в селектор состояний в моем поле адреса. – Nathan
FYI, после некоторого возиться, я понял, как захватить json и заставить JS делать то, что мне нужно. В очередной раз благодарим за помощь! – Nathan