【问题标题】:Activerecord query where array include an ID数组包含 ID 的 Activerecord 查询
【发布时间】:2014-04-21 20:53:50
【问题描述】:

我正在尝试创建一个查询来显示我的 CMS 中某个部分的所有内容。

关系是一对多的,一个内容有多个部分。

现在我创建一个节控制器,并在 show 方法中接收节的 params[:id]。

我必须选择 content.section_ids 数组包含我的 params[:id] 的所有内容

我知道如何创建反向查询(其中 ID 在数组中),但我找不到解决方案。

我的查询是:

@contents = Content.published.recent.where("#{params[:id]} IN (?)", ...)

更新

这就是关系。

我必须选择该部分 == 的所有内容到我的参数中传递的部分 ID。

class Content < ActiveRecord::Base
   has_many :sections, as: :sectionable
end

class Section< ActiveRecord::Base
  belongs_to :sectionable, polymorphic: true
end

【问题讨论】:

  • 听起来你已经创建了一对多关系,方法是让 Content 有一个 section_ids 字段,它是某种数组或序列化数组,而不是使用 content_id 外键在节表上?要充分回答问题,需要有关数据库结构的更清晰信息。你还在用什么数据库?

标签: ruby-on-rails activerecord


【解决方案1】:
@contents = Content.published.recent.where(:id => params[:id])

不要将参数放入像 ("id in (#{params[:id])") 这样的 where 子句中,因为它容易受到 sql 注入的影响。更多详情在这里Rails SQL injection?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多