2011-11-29 78 views
2

我有這樣的代碼:過濾器上的關係,activescaffold

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執行兩個查詢,一個用於文章,第二個用於Category(SELECT * FROM categories),所以想要更改第二個查詢(如SELECT * FROM categories where group ='something'。 do you有什麼建議嗎?

感謝

回答

3

如果我理解這個問題,你需要過濾的新的和編輯文章選擇菜單類別,立足參數。 如果是這樣的話,你可以覆蓋options_for_association_conditions(association)in articles_helper,例如:

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。

+0

我認爲你應該顯示一些代碼片段來改善你的答案 – shodanex