2013-04-23 5 views
6

Ich habe folgendes ModellWie ransack verwenden zu delegierten Felder

class Position < ActiveRecord::Base 

    belongs_to :position_name 
    delegate :name, to: :position_name 

Und das Suchformular

= 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') 

Und ich immer noch diese Fehlermeldung angezeigt:

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

Ich denke, Dies liegt an dem Namen der delegierten Methode.

Wie kann ich racks auf delegierten Methoden verwenden?

+0

gleichen Problem hier –

Antwort

6

Es ist eine späte Antwort, aber vielleicht hilft es jemand anderem. Also, ich hatte ein ähnliches Problem.

Ich hatte 3 Modelle: Bereich, Gebäude und Produkt, wo Bereich has_many :buildings, Gebäude has_many :products. In meinem Produktmodell habe ich delegate :area_id, to: :building verwendet.

Ich verwendete ransack, um ein Produkt nach solchen Feldern wie Name, Bereich, Gebäude zu suchen. In meinem Controller Aktion @search Variable enthalten Buidings Modell zugeordnet sind, wie folgt aus:

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

So war mein search_form wie

= 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)) 

Das heißt, wenn in Ihrem Controller Sie zugehörigen Modell aufgenommen haben: position_name , als aus Ihrer Sicht sollten Sie verwenden = f.text_field :position_name_name_cont

+0

Gibt es eine Möglichkeit, dies ohne das Präfix zu tun? Wie: bereich_id_eq. – HFX

+0

@HFX Ich glaube nicht –