Rails Runtime Ошибка в контроллере #Index - не поддерживается: символ
Я реализовал несколько различных форм поиска в своем приложении, пытаясь выполнить одно конкретное действие (ввести идентификатор объекта и перейти прямо к странице показа для этого экземпляра), и я довольно близко подошел к этой, пока не столкнулся с Unsupported: Symbol
Ошибка выполнения для Cards#Index.
вот форма поиска (я просто бросил ее в layouts/application.html.erb
:
<%= form_tag(cards_path, :method => "get") do %>
<div class="input-append">
<%= text_field_tag :search, params[:search], class: "span2", placeholder: "Search Cards" %>
<button class="btn" type="submit"><i class="icon-search"></i></button>
</div>
<% end %>
А вот мой cards_controller.rb
действие индекса:
def index
if params[:search]
@cards = Card.search(params[:search]).order("created_at DESC")
else
@cards = Card.order("created_at DESC")
end
end
def show
end
private
def set_card
@card = Card.find(params[:id])
end
def card_params
params.require(:card).permit(:title, :description)
end
и модель card.rb
class Card < ActiveRecord::Base
validates :title, presence: true, uniqueness: true
validates :description, presence: true
def self.search(query)
where(:id, query)
end
end
Я использовал where("title like ?", "%#{query}%")
для модели, но я читал, что создание SQL-запросов таким образом было угрозой безопасности, и я также искал точные совпадения.
Так что же мешает представлению распознать параметр id, переданный поиском?
1 ответ
Нет ничего плохого в вашем взгляде - проблема в вашем методе поиска, который делает
where(:id, query)
Что просто не является допустимым использованием where
,
Так должно быть
where(id: query)
Или чуть более старой школы:
where("id = ?", query )