【问题标题】:Params not being read in controller action控制器操作中未读取参数
【发布时间】:2019-01-08 04:29:48
【问题描述】:

我正在设置一个州选择器下拉菜单,最终目标是让用户选择一个州,然后使用下面的选择标签填充该州的城市,我使用 city-state gem 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

ma​​in.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> " 

【问题讨论】:

  • 我会考虑做puts params 并查看调用RegistrationsController#new 时可用的内容。这些信息可能会帮助我们了解发生了什么,并将有助于包含在您的问题中。
  • 嘿@david 感谢您的快速响应,我记录了 params.inspect 并得到了 "<:parameters>"Colorado", "controller"=>"families/registrations", "action"=>"new"} 允许:false> "
  • 下拉菜单当前是显示州名还是两个字母的代码?

标签: ruby-on-rails parameters


【解决方案1】:

docs 表明cities 方法需要一个状态符号。您正在使用 simplified 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) 

【讨论】:

  • 我想说问题是我们需要从选择中获取 2 个字母的代码(我们目前正在获取城市名称)。不过,我不确定我是否建议了正确的代码更改。
【解决方案2】:

如果您在ActionController::Parameters 中获得permitted: false,可能是因为您没有将控制器中的参数(在本例中为:state)列入白名单,就像Strong Parameters 所要求的那样

来自文档:

使用强参数,在被列入白名单之前,禁止在 Active Model 批量分配中使用 Action Controller 参数。

例子:

private
  def person_params
    params.require(:person).permit(:name, :age)
  end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 2013-10-26
    • 1970-01-01
    相关资源
    最近更新 更多