我有这样的代码:
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
,其中group='something')。你有什么建议吗?
谢谢
如果我理解了这个问题,您需要根据参数过滤选择菜单中可供新建和编辑文章的类别。如果是这种情况,您可以在articles_helper中重写options_for_association_conditions(关联),例如:
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部分