过滤关系,activescaffold

Posted

技术标签:

【中文标题】过滤关系,activescaffold【英文标题】:filter on relation, activescaffold 【发布时间】:2012-01-09 05:50:38 【问题描述】:

我有这个代码:

class ArticlesController < ApplicationController
  active_scaffold :articles do |config|
   config.label = "Manage my articles"
   config.actions.exclude :show

    form_cols = [:name, :summary, :content, :author, :category, :article_date]

      config.columns = form_cols

      config.list.sorting = :content_file_name => :asc
      config.columns[:category].css_class = 'categories'
      config.columns[:category].clear_link
      config.columns[:category].form_ui = :select
......

和模型

class Article < ActiveRecord::Base
  belongs_to :category, :class_name => 'Category'
end

class Category < ActiveRecord::Base
  has_many :articles, :foreign_key => :category_id
end

类别映射到这张表上

CREATE TABLE `categories` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `active` tinyint(1) DEFAULT '1',
  `group` varchar(255) DEFAULT 'novel',
  PRIMARY KEY (`id`)
);

我想根据 user_type 仅显示具有特定“组”的类别。 问题是我不知道如何过滤关系中的行。 我可以看到 activescaffold 执行两个查询,一个用于文章,第二个用于类别(SELECT * FROM categories)所以想要更改第二个查询(例如 SELECT * FROM categories where group='something'. 你有什么建议吗?

谢谢

【问题讨论】:

【参考方案1】:

如果我理解这个问题,您需要根据参数过滤新文章和编辑文章的选择菜单中可用的类别。 如果是这种情况,您可以覆盖articles_helper中的options_for_association_conditions(association),例如:

module ArticlesHelper
  def options_for_association_conditions(association)
    if association.name == :category
      ['categories.id IN (?)', current_user.available_groups.map(&:id)]
    else
      super
    end
  end
end

见:https://github.com/activescaffold/active_scaffold/wiki/Custom-Association-Options

另一个选项可以自定义如何呈现选择,在视图/文章中添加 _category_form_column 部分。

【讨论】:

我认为你应该显示一些代码 sn-p 来改进你的答案

以上是关于过滤关系,activescaffold的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 过滤嵌套关系

嵌套的一对多关系 sqlalchemy 过滤

多对多关系过滤器

Sqlalchemy:过滤关系中应该有多少个实例

基于关系过滤的雄辩的`with()`

在 Core Data 中获取过滤的关系