我尝试使用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
非常感谢任何帮助,资源和指导。
答案 0 :(得分:0)
我认为你不需要专门的搜索者。我相信你的观点,在<%= f.search_field :instructor_user_name %>
内你只是可以做到:
@survey_responses = paginate(@q)
此外,在您的控制器中而不是@survey_responses = paginate(@survey_responses)
我认为您需要require_relative 'boot'
require 'rails/all'
Bundler.require(*Rails.groups)
require "google/cloud/logging/rails"
module StackTest
class Application < Rails::Application
config.google_cloud.logging.project_id = "valid-project-id"
config.google_cloud.logging.keyfile = "config/stackdriver.json"
config.google_cloud.use_logging = true
config.google_cloud.logging.log_name = 'stackdriver-puma-test'
end
end
,因此您可以对响应进行分页而不是搜索对象(根据您的分页宝石可能会出错)使用)。