ruby-on-rails - Rails with Grape API - params 中的关系 id 作为过滤器
问题描述
在我的 Rails/Grape API 应用程序中,我有一个端点,我在其中列出了所有用户注释。模型Note
与模型具有可选关系Activity
(注释可以是活动的一部分,如下所示)。
class Note < ApplicationRecord
belongs_to :user
belongs_to :activity, optional: true
end
我的端点如下所示:
module Notes
class Index < Base
desc 'All user notes',
success: { code: 200 },
failure: [
{ code: 401, message: 'The access token is invalid' },
{ code: 401, message: 'The access token expired' },
{ code: 404, message: "Couldn't find Notes" },
]
get do
::DetailedSerializer.new(
Note.where(user_id: current_user.id),
)
end
end
end
我想按活动过滤笔记(例如仅显示笔记activities_id = 1
)。为此,我需要activities_id
在参数中使用作为过滤器,但我不知道此类操作的语法是什么,如何实现?
解决方案
在您的葡萄 API 中获取参数的语法:-
desc 'Your description.'
params do
requires :id, type: Integer, desc: 'Model ID.'
end
get do
Model.find(params[:id])
end
所以根据你的代码: -
class Index < Base
desc 'All user notes',
success: { code: 200 },
failure: [
{ code: 401, message: 'The access token is invalid' },
{ code: 401, message: 'The access token expired' },
{ code: 404, message: "Couldn't find Notes" },
]
params do
optional :activity_id, type: Integer, desc: 'Activity filter.'
end
get do
## then you can use this id for filter in your query
puts "activity_id ====> #{params[:activity_id]} "
::DetailedSerializer.new(
Note.where(user_id: current_user.id),
)
end
end
您可以制作此参数optional
或requires
:-
params do
optional :activity_id, type: Integer, desc: 'Activity filter.'
end
或者
params do
requires :activity_id, type: Integer, desc: 'Activity filter.'
end
推荐阅读
- python - Django:注释每个对象的重复值数量的计数
- java - ArrayList 的转换
> 列出 - >
- python - 安装 Anaconda 时出错
- android - 如何在 GridView [Kotlin] [Android Studio] 中读取和更新 EditText
- jquery - 将可拖动幻灯片捕捉到下一个或上一个幻灯片位置
- python - aws linux virtualenv 安装扭曲
- python - 向 GitHub API 发送 GET 请求,请求获取 Pull Request 中的提交消息列表
- python - Python:从列表中删除项目并保持原始列表顺序
- excel - VB脚本按行循环Excel数据
- iframe - Apex 在 IFrame 中添加的额外样式属性