2013-04-23 19 views
6

tôi có mô hình sauLàm thế nào để sử dụng ransack trên các lĩnh vực giao

class Position < ActiveRecord::Base 

    belongs_to :position_name 
    delegate :name, to: :position_name 

Và hình thức tìm kiếm này

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

Và tôi vẫn nhận được thông báo lỗi này:

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

Tôi nghĩ đó là vì tên phương thức được ủy quyền.

Tôi làm cách nào để sử dụng tính năng tải lại trên các phương thức được ủy quyền?

+0

cùng một vấn đề ở đây –

Trả lời

6

Đó là câu trả lời muộn, nhưng có lẽ nó sẽ giúp người khác. Vì vậy, tôi đã có một vấn đề tương tự.

Tôi có 3 kiểu: khu vực, tòa nhà và sản phẩm, ở đó khu vực has_many :buildings, tòa nhà has_many :products. Trong mô hình sản phẩm của tôi, tôi đã sử dụng delegate :area_id, to: :building.

Tôi đã sử dụng lệnh ransack để tìm kiếm sản phẩm theo các lĩnh vực như tên, khu vực, tòa nhà. Trong biến động @search điều khiển của tôi bao gồm liên quan đến mô hình Buiding, như thế:

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

Vì vậy search_form của tôi là như

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

Nghĩa là, nếu trong điều khiển của bạn, bạn đã bao gồm mô hình liên quan đến: position_name , theo quan điểm của bạn, bạn nên sử dụng = f.text_field :position_name_name_cont

+0

Có cách nào để thực hiện việc này mà không có tiền tố không? Giống như: area_id_eq. – HFX

+0

@HFX Tôi không nghĩ vậy –