Rails 路由和查询字符串

Rails routes and querystring

我在尝试为来自 ember 的查询定义正确路由时遇到问题。请求如下所示:

GET "/users?id=1011

无论我尝试什么,我总是将请求转发到 index 操作,而它是用于 show 操作的。 我尝试了很多东西,比如

get "/users?id=", to: redirect('/users')

但似乎没有任何效果。 谁能向我解释我能做什么,最重要的是背后的原因? 非常感谢您的宝贵时间!

GET /users?id=1011 总是转到索引,因为 Rails 只将路由视为 GET /users。问号表示一个参数,它不是您定义的任何路由的一部分。

您可以修改索引方法来解释参数,例如:

def index
  if params[:id]
      # call show, do something, whatever
  else
      # regular index action
  end
end

在只检索一个用户的情况下,更常见的做法是将其路由到您最初打算的显示操作。为此,不要将 id 作为查询参数传递,而是作为 slug 段 /users/1011 传递,您可以通过在 routes.rb:

中声明以下内容来实现
get '/users/:id', to: 'users#show'

如果您想全力以赴,那么您不妨像这样将用户声明为资源:

resources :users

这将自动连接您的索引、显示、更新、销毁等。将 Active Model Serializers 加入其中,您可以让 Ember 数据开始与您的 API 近乎对话"out of the box".