【发布时间】:2016-08-31 17:30:29
【问题描述】:
从标题上看,这听起来有点复杂,但实际上不应该如此。我将 Rails 用于 API,并且有一个接受一系列项目的端点。我想返回属于它的记录与数组中至少一个元素匹配的所有记录。
例如,假设我正在创建一个博客,并且我有帖子和标签。
我可能会要求类似:
GET http://localhost:3000/api/v1/posts_by_tag?tags=news,weather,life
然后在 routes.rb
get '/posts_by_tag' => 'posts#index_by_tag'
在 posts_controller.rb
中def index_by_tag
tags = params[:tags].split(',')
@posts = Post.where( any element in Post.tags matches any element in tags )
render json: @posts.to_json, status: :ok
end
在上面的假设示例中,我想返回所有带有“新闻”、“天气”或“生活”标签的帖子。
我来自 node,最近没有花太多时间在 Rails 上。但这感觉就像有一种非常明确的 Rails/ActiveRecord 方式来执行此操作。
【问题讨论】:
-
这是一个什么样的数组?你用的是什么数据库?
-
我使用的是 Postgres,数组就是 Ruby 的 String.split() 方法生成的任何类型的数组。
-
但是 post.tags 是什么类型的数组呢?它是 Postgres 数组吗?
-
这是一个关联模型。发布 has_many 标签
标签: ruby-on-rails activerecord ruby-on-rails-5 rails-api