2013-04-23 53 views
6

我有以下型號如何使用洗劫的委派領域

class Position < ActiveRecord::Base 

    belongs_to :position_name 
    delegate :name, to: :position_name 

而這種搜索形式

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

我仍然收到此錯誤信息:

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

我想這是因爲委派的方法名稱。

如何在委託方法上使用ransack?

+0

同樣的問題在這裏 – 2014-02-26 21:20:28

回答

6

這有點遲來的答案,但也許它會幫助別人。 所以,我有一個類似的問題。

我有3種型號:地區,建築和產品,其中地區has_many :buildings,建築物has_many :products。在我的產品型號中,我使用delegate :area_id, to: :building

我用ransack搜索產品的名稱,地區,建築等領域。在我的控制器的動作@search變量包含的相關層樓高的模式,這樣的:

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

所以我search_form就像

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

也就是說,如果在你的控制器已包含關聯的模型:position_name ,比你的看法,你應該使用= f.text_field :position_name_name_cont

+0

有沒有辦法做到這一點,沒有前綴?像:area_id_eq。 – HFX 2016-10-25 10:11:42

+0

@HFX我不這麼認爲 – 2016-10-25 10:15:29