Rails 4:具有复杂范围的acts_as_list

时间:2014-01-10 05:17:51

标签: ruby-on-rails ruby rails-activerecord acts-as-list

我的模型有一个字符串字段bar,可以是abc。它使用has_ancestry和acts_as_list。我希望列表的范围是(1)祖先,(2)bar,但我希望ab在同一个列表中,但是{{1}在另一个列表中。也就是说,如果cbara,则Foo处于活动状态,应该在一个列表范围内,如果bbar,那么处于非活动状态,应单独列出。

以下是我认为该模型的样子:

c

问题是,如何让acts_as_list将两个bar的值放在一起?

(例如class Foo < ActiveRecord::Base scope :active, -> { where.not(bar: "c") } has_ancestry acts_as_list scope: [:ancestry, ???] end 之类的东西会给我三个不同的列表,而不是两个。)

如果我没有解释这个权利,请告诉我。我看起来很远谷歌,无法找到答案。谢谢!


Rails 4和Ruby 2;最新版本的祖先和acts_as_list,但这很灵活。

我应该补充一点,我考虑过添加另一个等同于scope: 'ancestry = \'#{ancestry}\' AND bar = \'bar\''的数据库列,但我希望能有另一个解决方案。

1 个答案:

答案 0 :(得分:0)

我最终选择了带有before_save回调的附加数据库列,以根据baz中的值进行设置。我也在考虑转换到排名模型(https://github.com/mixonic/ranked-model)而不是行为列表,但这是另一个问题。