ruby-on-rails Params与端点名称混淆,为什么?

js81xvg6  于 2023-06-07  发布在  Ruby
关注(0)|答案(1)|浏览(170)

我不知道当我打印参数时,我正在获取端点名称作为操作'change_state',我正在使用自定义路由,操作必须作为值'change_state',正确的值应该是'playing'

def change_state
    puts params

我得到这个:

#<ActionController::Parameters {"action"=>"change_state", "controller"=>"v1/sports", "sport_id"=>"5", "sport"=>{}} permitted: false>

路线的陈述就像他的:

resources :sports do
          post '/change_state', to: 'sports#next_state'

这是我的网址,我在使用陶罐

http://localhost:8110/.../sports/5/change_state

作为一个身体,我发送

{
 state: 'playing'
}
laik7k3q

laik7k3q1#

我相信这是正确的行为。params始终包含与路由到的控制器方法匹配的action。这是Rails中的正常行为,并为您提供了一种了解正在处理哪个“动作”的方法。* (见下文进一步解释)*

**你试过检查state密钥的参数吗?**您在问题中列出的输出似乎被切断了,如果您通过调试器检查,您可能会找到预期的密钥。您也可以通过puts params.to_unsafe_hash将其打印为散列

action密钥params进一步说明:

举个例子,在一个新的应用程序中,使用带有路由和控制器的StaticController:

# routes.rb
root "static#home"
  
# controllers/static_controller.rb
class StaticController < ApplicationController
  def home
    puts params
  end
  ...

当你访问http://localhost:3000/时,你会看到它打印出来:{"controller"=>"static", "action"=>"home"}
如果你访问http://localhost:3000/?state=exuberant,你会看到它打印:{"state"=>"exuberant", "controller"=>"static", "action"=>"home"}

相关问题