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".
我在尝试为来自 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".