Поиск кражи на has_one :through (псевдоним)

Я пытаюсь использовать ransack для поиска атрибута в ассоциации has_one в модели.
В настоящее время в моей модели у меня есть:

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 в представлении ответов на опрос. Должен ли я делать это с вымогателем? Мое понимание 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

Будем очень признательны за любую помощь, ресурсы и рекомендации.


person Regina DeAngelis    schedule 28.11.2017    source источник


Ответы (1)


Я не думаю, что вам нужен вымогатель конкретно. Я полагаю, на ваш взгляд, внутри search_form_for вы просто могли бы сделать:

<%= f.search_field :instructor_user_name %>

Кроме того, в вашем контроллере вместо @survey_responses = paginate(@q), я думаю, вам нужно @survey_responses = paginate(@survey_responses), чтобы вы могли разбивать на страницы ответы, а не объект кражи (может быть неправильно в зависимости от того, какой драгоценный камень разбивки на страницы вы используете).

person cm1745    schedule 29.11.2017