Включить родительские атрибуты при поиске по запросу - PullRequest
0 голосов
/ 21 октября 2018

У меня есть пользовательская модель, у которой есть _many Job Applications.

Все отлично работает, но когда я пытаюсь найти Job Applications по имени пользователя, я получаю ошибку ниже.

Ошибка

SQLite3::SQLException: no such column: first_name: SELECT  "job_applications"

Насколько я понимаю, мне нужно включить атрибуты пользователя в запрос на работу.

Как мне это сделать?

Просмотр (заявка на работу)

<%= form_for :search, :html => {:method => :get, :id => 'search'} do |f| %>
  <%= text_field_tag :terms, params[:terms], :type => 'search' %>
<% end %>

Контроллер (заявка на работу)

def index
  @job = Job.find(params[:job_id])
  @job_applications = @job.job_applications.search(params[:terms])
end

Модель (заявка на работу)

def self.search(terms)
  terms ||= ""
  conditions = terms.split(" ").map do |term|
    term = term.strip.gsub("'","''")

    ### I am having an issue here...
    ### how do i include the user attributes in this query
    "first_name like '%#{term}%'"
  end
  where(conditions.join " OR ")
end

1 Ответ

0 голосов
/ 21 октября 2018

Вы должны объединить таблицу job_applications с таблицей users.

# job_applications.rb

def self.search(terms)
    terms ||= ""
    conditions = terms.split(" ").map do |term|
      term = term.strip.gsub("'","''")
      "users.first_name like :term"
    end
    joins(:user).where(conditions.join " OR ")
end

Избегайте прямой передачи необработанных пользовательских данных в ваши запросы, чтобы избежать внедрения sql.Используйте встроенные в рельсы фильтры или продезинфицируйте их самостоятельно.

def self.search(terms)
    terms ||= ""
    term_args = []
    conditions = terms.split(" ").map do |term|
      term = term.strip.gsub("'","''")
      term_args << "%#{term}%"
      "users.first_name like ?"
    end
    joins(:user).where(conditions.join(' OR '), term_args)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...