2013-04-23 10 views
6

ho il seguente modelloCome usare ransack sui campi delegati

class Position < ActiveRecord::Base 

    belongs_to :position_name 
    delegate :name, to: :position_name 

E questo modulo di ricerca

= search_form_for @search, url: '#', method: 'GET', html: {id: nil, class: "term_search_form"} do |f| 
     = f.text_field :name_cont, class: 'search-query', id: nil, placeholder: t('search') 

E ancora ricevo questo messaggio di errore:

undefined method `name_cont' for #<Ransack::Search:0x007f97187c5b80> 

penso è a causa del nome del metodo delegato.

Come posso utilizzare il ransack su metodi delegati?

+0

stesso problema qui –

risposta

6

È una risposta tardiva, ma forse aiuterà qualcun altro. Quindi, ho avuto un problema simile.

Avevo 3 modelli: area, edificio e prodotto, dove area has_many :buildings, edifici has_many :products. Nel mio modello di prodotto ho utilizzato delegate :area_id, to: :building.

Ho usato il sacco per cercare un prodotto in campi come nome, area, edificio. Nel variabile di azione @search del mio controller incluso associato modello Buiding, come quella:

@search = Product.includes(:building).search(params[:q])

Quindi il mio search_form era come

= search_form_for @search, url: user_products_path do |f| 
    %td 
    %td= f.text_field :name_cont, class: "form-control", placeholder: t('.name') 
    %td= f.select :building_area_id_eq, options_for_select(Area.data_for_select(true), q_param(:building_area_id_eq)) 
    %td= f.select :building_id_eq, options_for_select(Building.data_for_select(true), q_param(:building_id_eq)) 

Cioè, se il controller di aver incluso modello associato: position_name , che a tuo avviso dovresti usare = f.text_field :position_name_name_cont

+0

C'è un modo per farlo senza il prefisso? Mi piace: area_id_eq. – HFX

+0

@HFX Io non la penso così –

Problemi correlati