Условия в вашем операторе SQL и вашем коде Ruby, повторяющемся в наборе результатов, являются взаимоисключающими.
Допустим, таблица cart
содержит следующие элементы:
item_id: a
item_id: b
item_id: c
Этот оператор выполняется
statement = Connection.conn.prepare("SELECT item_id from cart where item_id IN (?) ")
result3 = statement.execute(input_id)
в контексте, где input_id
конкретное значение, которое вы получили как-то.Это может быть любое значение.a
, b
, c
, потенциально что-то, чего нет в вашей базе данных, например z
или x
.
Если предположить, что item_id
уникален в таблице, вашЗапрос вернет набор результатов, который будет содержать 1 элемент (если значение input_id
равно a
, b
или c
) или 0 элементов (если input_id
- это что-то еще).result3
будет пустым или будет содержать один элемент, чей item_id
совпадает с input_id
.Запрос буквально переносится на Дайте мне товар, чей item_id
равен <whatever the value of input_id happens to be>
Во время выполнения мы рассматриваем два возможных сценария.Давайте начнем с пустого набора результатов (элементы с данным input_id
не найдены)
result3.each do |row|
# your code
end
ничего не делает, потому что в result3
.
нет элементов.вы можете получить массив с элементом корзины с item_id
из a
, b
или c
, в зависимости от того, что вы передали как input_id
.
В этом случаеelse
условие никогда не выполняется
[{'item_id' => 'a'}].each do |row|
if ( row["item_id"] == 'a' ) # Always true because the item in the result set was selected by its index, 'a'
puts 'Already in cart'
puts row["item_id"]
else
puts 'Added to cart'
puts row["item_id"]
end
end
Эта логика ошибочна.Похоже, вы пытаетесь проверить, существует ли уже элемент с данным идентификатором в таблице cart
, и добавить элемент в таблицу, если его нет.SELECT
заявление никогда не сделает этого.Это похоже на работу для оператора INSERT
.SQL - очень мощный язык сам по себе.Если вас это смущает, вы можете взглянуть на Active Record , который абстрагирует ее, скрывая базу данных за объектно-ориентированным фасадом.Я давно не программировал базы данных на Ruby, поэтому не уверен, что круто в эти дни.