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 )
Другие вопросы по тегам