ruby-on-rails 为什么当我添加params(rails,minitest)时,我的“get”请求变成了“post”请求?

o2g1uqev  于 2023-05-02  发布在  Ruby
关注(0)|答案(2)|浏览(136)

我正在尝试在rails应用程序中编写一个分页索引操作。这是我的控制器代码

def index
  @pokemons = Pokemon.all.limit(params[:limit]).offset(params[:offset])
end

当我通过浏览器发出请求时,这在我的开发服务器中工作得很好。
然而,在我的测试中,我在调用索引操作时遇到了麻烦。
当我运行下面的测试时,一个GET请求被路由到#index。

test "should return paginated index" do
  get pokemons_url, as: :json
  assert_response :success
end

但是,只要我添加与分页相关的参数,就像这样。..

test "should return paginated index" do
  get pokemons_url, params: {limit: 10, offset: 0}, as: :json
  assert_response :success
end

...我的服务器收到的请求变成了POST而不是GET,并且它被路由到我的#create操作。
下面是我的config/routes.rb

Rails.application.routes.draw do
  resources :pokemons
end

下面是rails routes的相关输出:

pokemons GET    /pokemons(.:format)                                                                               pokemons#index
                                     POST   /pokemons(.:format)                                                                               pokemons#create
                             pokemon GET    /pokemons/:id(.:format)                                                                           pokemons#show
                                     PATCH  /pokemons/:id(.:format)                                                                           pokemons#update
                                     PUT    /pokemons/:id(.:format)                                                                           pokemons#update
                                     DELETE /pokemons/:id(.:format)                                                                           pokemons#destroy

为什么在Minitest中向'get'方法添加参数会将GET请求转换为POST请求?如何从Minitest发送包含分页参数的GET?

mbzjlibv

mbzjlibv1#

如果参数是简单的查询字符串参数,则应将其传递给路由帮助程序:

test "should return paginated index" do
  get pokemons_url(limit: 10, offset: 0), as: :json
  assert_response :success
end
neekobn8

neekobn82#

请告诉我的routes.rb和你的定义pokemons_url你必须确保pokemons_url相同的pokemons_index_path如果你的控制器名称是PokemonsController

相关问题