如何过滤关系

时间:2014-02-28 17:08:57

标签: ruby-on-rails

我猜这是一个非常基本的问题,但我很难找到答案。可能这不是人们做的事情,如果是这样,我想知道原因。

在show动作中,通常我会有一些这样的代码:

@structure = Structure.where(id: params[:id])

这让我得到一个包含给定id的唯一结构的关系。结构has_many计划。我想要的是我的“结构”关系的一种方式,包含具有已经过滤的计划关系的结构。因此,我不希望结构确定其规划,我希望过滤这些结构上的规划。我想找回一个包含只有一部分规划的结构的关系。这甚至有意义吗?

修改

我开始明白为什么这没有意义,但也难以表达出来。这个,

@structure           = Structure.where(id: params[:id])
@structure.plannings = @structure.plannings.where(audience_ids: "1")

引发Cannot modify association 'Structure#plannings' because the source reflection class 'Planning' is associated to 'Course' via :has_many行的错误。我在这里得到的信息是:你要做的事情比你想象的要复杂得多。

我想我应该只返回看起来像我想要它的json,而不是试图修改关系。

1 个答案:

答案 0 :(得分:0)

如果您作为结构关系获取的所有计划的标准始终相同,则可以在关系中使用default scope(在 Rails 4 上可用)

class Structure < ActiveRecord::Base
  has_many :plannings -> { where(attribute_a: true) }
end
那样的方式 Structure.where( ... ).first.plannings
将所需的范围应用于规划。