如何在委派字段上使用ransack

时间:2013-04-23 13:33:01

标签: ruby-on-rails ransack

我有以下型号

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?

1 个答案:

答案 0 :(得分:6)

这是一个迟到的答案,但也许它会帮助别人。 所以,我有类似的问题。

我有3个模型:区域,建筑物和产品,区域has_many :buildings,建筑物has_many :products。在我的产品模型中,我使用了delegate :area_id, to: :building

我使用ransack通过名称,区域,建筑等字段搜索产品。在我的控制器的动作@search变量包括相关的Buiding模型,如:

@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