Параметры не читаются в действии контроллера - PullRequest
0 голосов
/ 08 января 2019

Эй, ребята, я настраиваю выпадающее окно выбора состояний, конечная цель - чтобы пользователь выбрал штат и тег выбора ниже, чтобы заполнить города для этого штата, я использую драгоценный камень города-штата https://github.com/loureirorg/city-state

Я получил правильные параметры в моем запросе, но они не читаются методом контроллера

регистрация-controller.rb

def new
  super
  @cities = CS.get(:us,params[:state]) 
  puts @cities                 
end

это не принимает: state param

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> " 

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Если вы получаете permitted: false в ActionController::Parameters, это, вероятно, связано с тем, что вы не вносите белый список своих параметров (:state в этом случае) в свой контроллер, как требуется для Сильные параметры

Из документов:

При наличии строгих параметров запрещается использовать параметры Action Controller в массовых присвоениях активной модели до тех пор, пока они не будут внесены в белый список.

Пример:

private
  def person_params
    params.require(:person).permit(:name, :age)
  end
0 голосов
/ 08 января 2019

документы предполагают, что метод 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) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...