2017-11-28 7 views
1

나는 모델에서 has_one 연관에 대한 속성을 검색하기 위해 ransack을 사용하려고합니다.
현재 내 모델에서 내가 가진 :랜서크 검색에 has_one : through (별칭)

class SurveyResponse < ActiveRecord::Base 
    belongs_to :course_schedule 
    has_one :instructor, through: :course_schedule 
    has_one :instructor_user, through: :instructor, foreign_key: "user_id", source: :user 

이 내 설문 조사 응답보기에 instructor_user's 이름으로 검색하고자합니다. 내가 ransacker와 함께해야할까요? Arel에 대한 나의 이해는 매우 제한적이지만, 이렇게 할 수 있습니까? (나는 그대로이 작동하지 않습니다 알고 ..)

def self.ransackable_attributes(auth_object) 
[ 
    'created_at', 
    'instructor_user_name' 
] 
end 

ransacker :instructor_user_name, type: :string do 
    Arel.sql('string(survey_responses.instructor_user.last_name)') 
end 

을 내 설문 조사 응답 컨트롤러에서 나는 현재 가지고 :

def index 
    @search_associations = [:course, :user] 

    @q = SurveyResponse.where(corporation_id: @corporation.id).ransack(params[:q]) 

    @q.build_condition 

    @survey_responses = @q.result.includes(:course, :user, :course_schedule, :instructor, :instructor_user).order(created_at: :asc) 

    @survey_responses = paginate(@q) 
end 

이 어떤 도움, 자원 및 지침을 크게 감상 할 수있다.

답변

0

특별히 ransacker가 필요하다고 생각하지 않습니다. 나는 search_form_for 안에 당신이 단지 할 수있는,보기 믿는 :

<%= f.search_field :instructor_user_name %> 

또한, 컨트롤러 대신 @survey_responses = paginate(@q)에 난 당신이 그래서 당신은 잘못에 수합니다 (더듬다 오브젝트를 응답을하지 쪽수를 매기다 수 @survey_responses = paginate(@survey_responses) 필요하다고 생각 이것은 당신이 사용하고있는 페이지 매김 젬을 기반으로합니다.)