gpt4 book ai didi

ruby-on-rails-3 - Rails 3.1 如何为指向用户资源的 "me"创建 API 路由

转载 作者:行者123 更新时间:2023-12-04 12:35:33 25 4
gpt4 key购买 nike

我在 rails 中有一组 API 路由,如下所示

namespace "api" do
namespace "v1" do
resources :users do
resources :posts
resources :likes
...
end
end
end

到现在为止还挺好。我可以 GET/api/v1/users/fred_flintstone 并检索该用户的所有信息。

我现在想做的是添加“我”(ala facebook)的概念,这样如果用户通过身份验证(fred_flintstone),我还可以执行以下操作

获取/api/v1/我

获取/api/v1/me/posts

...

我需要两组路线。因此,我想使用 GET/api/v1/me/posts 或 GET/api/v1/users/fred_flintstone/posts 获得相同的结果。

我已经完成了路线教程并在谷歌上搜索过,因此指针将与直接答案一样受到赞赏。

编辑:

我所做的有效的工作是非常hacky的。我使用范围在路由表中创建了第二组条目:
scope "/api/v1/me", :defaults => {:format => 'json'}, :as => 'me' do
resources :posts, :controller => 'api/v1/users/posts'
resources :likes, :controller => 'api/v1/users/likes'
...
end

然后我添加了一个 set_user 方法来测试 params[:user_id] 的存在。我真的在寻找一种方法来解决这个问题。

最佳答案

将路由保留在您的帖子中的方式,然后在 Controller 中解决这个问题怎么样?

这是一个 before_filter您可以将其应用于所有拉动 User 的路线。来自 :user_id .

# Set the @user variable from the current url; 
# Either by looking up params[:user_id] or
# by assigning current_user if params[:user_id] = 'me'
def user_from_user_id
if params[:user_id] == 'me' && current_user
@user = current_user
else
@user = User.find_by_user_id params[:user_id]
end

raise ActiveRecord::RecordNotFound unless @user
end

然后在您的 Controller 功能中,您可以使用 @user变量而不必担心用户是否通过了 user_id , 或 me .

希望有帮助! :)

编辑:

根据您的评论,让我再试一次。

列出您希望通过标准路由和 /me 访问的所有资源的函数怎么样?路线。然后您可以在您需要的两个命名空间中使用该函数。

路由文件
# Resources for users, and for "/me/resource"
def user_resources
resources :posts
resources :likes
...
end

namespace 'api' do
namespace 'v1' do
resources :users do
user_resources
end
end
end

scope '/api/v1/:user_id', :constraints => { :user_id => 'me' },
:defaults => {:format => 'json'}, :as => 'me' do
user_resources
end

# We're still missing the plain "/me" route, for getting
# and updating, so hand code those in
match '/api/v1/:id' => 'users#show', :via => :get,
:constraints => { :id => 'me' }
match '/api/v1/:id' => 'users#update', :via => :put,
:constraints => { :id => 'me' }

关于ruby-on-rails-3 - Rails 3.1 如何为指向用户资源的 "me"创建 API 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10114933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com