2013-04-19 2 views
0

나는 내 코드를 반복해서 살펴 봤으며 내 문제를 볼 수 없습니다.Ransack의 collection_select 및 HABTM은 정의되지 않은 메서드를 반환합니다.

두 가지 모델 인물과 자격 증명이 있습니다. 그들은 HABTM 관계가 있습니다.

사람

class Person < ActiveRecord::Base 
    attr_accessible :credential_ids 
    has_and_belongs_to_many :credentials 

    UNRANSACKABLE_ATTRIBUTES = ["id", "hidden_note", "created_at", "updated_at"] 

    def self.ransackable_attributes auth_object = nil 
    (column_names - UNRANSACKABLE_ATTRIBUTES) + _ransackers.keys 
    end 
end 

자격

class Credential < ActiveRecord::Base 
    attr_accessible :description, :name 
    has_and_belongs_to_many :people 

    UNRANSACKABLE_ATTRIBUTES = ["id", "created_at", "updated_at"] 

    def self.ransackable_attributes auth_object = nil 
    (column_names - UNRANSACKABLE_ATTRIBUTES) + _ransackers.keys 
    end 

end 

여기에 사람들 index.html.erb 내 폼의 :

<%= search_form_for @search, :class => 'no-bottom-margin form-inline' do |f| %> 
    %= f.collection_select(:credentials_id_eq , Credential.all, :id, :name)%> 
    <div class='actions'><%= f.submit "Search", :class => 'btn btn-primary btn-large' %></div> 
<% end %> 

그리고 마지막으로는,이 난 오류입니다 점점.

undefined method `credentials_id_eq' for #<Ransack::Search:0x00000105aa4f28> 

답변

0

그래서 당신이 모델의 속성 UNRACKSACKABLE과 같이 할 경우 :

UNRANSACKABLE_ATTRIBUTES = ["id", "created_at", "updated_at"] 

당신은 더듬다의 사용할 수 없습니다 특정 속성 model_attribute_predicate 기능을. 이와 같이, :credentials_id_eq

이제는 분명하지만 사용자 지정 쿼리를 만들 때 사용자 ID를 숨기고 싶지만 직접 사용할 수있게하려고합니다. 나는 덩어리 기능을 변경했습니다. :credentials_name_cont 그리고 잘 작동했습니다. 또한, unpacksackable 속성 목록에서 id을 제거하면 작동합니다.