Я настраиваю раскрывающийся список выбора состояния, конечная цель - пользователь должен выбрать штат и тег select ниже, чтобы заполнить городами для этого штата im, используя драгоценный камень города-государства https://github.com/loureirorg/city-state
Я получил правильные параметры в своем запросе, но они не читаются методом контроллера.
registrations-controller.rb
def new
super
@cities = CS.get(:us,params[:state])
puts @cities
end
это не подбирает параметр: state
new.html.erb
<%= select_tag :state,options_for_select(CS.states(:us)),
{:class => "signup-input-container--input", :id => "state-picker"} %>
routes.rb
devise_scope :family do
get 'states', to: 'families/registrations#new'
end
main.js
var state = document.getElementById("state-picker");
state.addEventListener("change", function() {
$.ajax({
url: "/states?state = " + state.value,
type: "GET"
})
})
Кто-нибудь знает, почему это происходит? Я также зарегистрировал параметры и получил.
"<ActionController::Parameters {"state"=>"Colorado", "controller"=>"families/registrations", "action"=>"new"} permitted: false> "
привет @david, спасибо за быстрый ответ. Я зарегистрировал params.inspect и получил "<ActionController :: Parameters {" state "=>" Colorado "," controller "=>" family / registrations "," action "=>" new " } разрешено: false> "
В раскрывающемся списке в настоящее время отображаются названия состояний или двухбуквенные коды?





документы предполагает, что метод cities хочет символ для состояния. Вы используете метод упрощенныйget, но ему, вероятно, также нужен символ вместо названия города в виде строки (что мы видим в вашем params).
Так что, возможно, в main.js должно быть следующее:
$.ajax({
url: "/states?state = " + state.key, // 'state.value' was the string of the state name, we want the two-letter code.
type: "GET"
})
Возможно, вам также придется изменить эту строку
@cities = CS.get(:us,params[:state])
к этому
@cities = CS.get(:us,params[:state].to_s)
Я бы сказал, что проблема в том, что нам нужно получить двухбуквенный код из выбора (в настоящее время мы получаем название города). Однако я не уверен, что предложил правильные изменения кода.
Если вы получаете permitted: false в ActionController::Parameters, это, вероятно, потому, что вы не добавляете в белый список свои параметры (в данном случае :state) в вашем контроллере, как того требует Сильные параметры
Из документов:
With strong parameters, Action Controller parameters are forbidden to be used in Active Model mass assignments until they have been whitelisted.
Пример:
private
def person_params
params.require(:person).permit(:name, :age)
end
Я бы подумал о том, чтобы сделать
puts paramsи посмотреть, что будет доступно при вызовеRegistrationsController#new. Эта информация может помочь нам понять, что происходит, и ее будет полезно включить в ваш вопрос.