Поиск одного конкретного идентификатора в ruby, используя where, но возвращает несколько разных - PullRequest
0 голосов
/ 21 октября 2018

Я пытаюсь вернуть курсы с определенным идентификатором предмета в ruby, используя where.В консоли он дает правильный идентификатор, который я хочу, но он возвращает много курсов с неправильным идентификатором.Может кто-нибудь сказать мне, что не так с моим кодом?Спасибо!

def display
subject_id = search_params[:subject]
puts subject_id
@courses = Course.where("subject_id", subject_id)
puts @courses.inspect
@courses = @courses.where("name LIKE ?", search_params[:course])
puts "******"
puts @courses.inspect
puts "******"
end

Это то, что появляется в консоли

Started POST "/search" for 127.0.0.1 at 2018-10-20 18:22:41 -0400
Processing by UsersController#display as JS
Parameters: {"utf8"=>"✓", "subject"=>"1161-850", "course"=>"",      "commit"=>"Search"}
Unpermitted parameters: :utf8, :commit
1161-850
Course Load (0.2ms)  SELECT  "courses".* FROM "courses" WHERE  (subject_id) LIMIT ?  [["LIMIT", 11]]

This is what displayed in console

Unpermitted parameters: :utf8, :commit
******
Course Load (0.4ms)  SELECT  "courses".* FROM "courses" WHERE  (subject_id) AND (name LIKE '') LIMIT ?  [["LIMIT", 11]]
#<ActiveRecord::Relation []>
******
Rendering users/display.html.erb within layouts/application
Course Load (0.4ms)  SELECT "courses".* FROM "courses" WHERE (subject_id) AND (name LIKE '')
Rendered users/display.html.erb within layouts/application (1.8ms)
Rendered layouts/_shim.html.erb (0.5ms)
User Load (0.2ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT ?  [["id", 1], ["LIMIT", 1]]
Rendered layouts/_header.html.erb (2.0ms)
Rendered layouts/_footer.html.erb (0.9ms)

Ответы [ 2 ]

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

Если вы хотите найти курсы с определенным значением subject_id и названием курса, вы можете сделать это одним запросом:

def display
   subject_id = search_params[:subject]
   course = search_params[:course]

   @courses = Course.where("name LIKE ? AND subject_id = ? ", "%#{course}%", subject_id)
end
0 голосов
/ 21 октября 2018

Course.where("subject_id", subject_id) не делает то, что вы ожидаете.Он генерирует условие со строкой "subject_id" и передает значение subject_id в качестве аргумента этому условию, если в условии ?.

Просто используйте команду write вместо

Course.where(subject_id: subject_id)

Предлагаю прочитать об интерфейсе ActiveRecord Query в Руководстве по Rails .

Более того, запрос LIKE через несколько строк также не будет работать.Возможно, вы захотите посмотреть этот вопрос о создании похожих запросов в ActiveRecord .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...