filtro sulla relazione, activescaffold
-
25-10-2019 - |
Domanda
ho questo codice:
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
......
e modelli
class Article < ActiveRecord::Base
belongs_to :category, :class_name => 'Category'
end
class Category < ActiveRecord::Base
has_many :articles, :foreign_key => :category_id
end
categoria è mappato su questo tavolo
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`)
);
Voglio mostrare solo le categorie con un particolare "gruppo" a seconda del user_type.
Il problema è che non so come filtrare le righe di una relazione.
Vedo che activescaffold eseguire due query, uno per gli articoli e un secondo per la categoria (SELECT * FROM categories
) quindi una voglia di cambiare questa seconda query (come SELECT * FROM categories
dove group = 'qualcosa'.
hai qualche suggerimento?
grazie
Soluzione
Se ho capito la domanda, è necessario filtrare le categorie disponibili nel menu di selezione per l'articolo nuovo e modificare, sulla base di un parametro. Se questo è il caso, è possibile escludere options_for_association_conditions (associazione) in articles_helper, ad esempio:
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
vedi: https://github.com/activescaffold/active_scaffold/wiki/ Custom-associazione-Opzioni
Un'altra opzione potrebbe essere personalizzare il modo di selezione è reso l'aggiunta di un _category_form_column parziale views / articoli.