Фильтровать по категории с помощью кнопки? - PullRequest
0 голосов
/ 14 октября 2018

Я часами искал это и не нашел решения, которое мне подходит. Я тоже новичок в этом.

В настоящее время у меня есть поле поиска, которое работает.

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

Списки Контроллер (продукты):

def index
  @listings = Listing.all
  if params[:search]
    @listings = Listing.search(params[:search]).order(created_at: :desc)
  else
    @listings = Listing.all.order(created_at: :desc)
  end
  @categories = Category.all
end

listing.rb модель:

  belongs_to :user
  belongs_to :category, required: false
  attr_accessor :new_category_name
  before_save :create_category_from_name

  def create_category_from_name
    create_category(name: new_category_name) unless new_category_name.blank?
  end

  def self.search(search)
    where("name LIKE ?","%#{search}%")
  end

Категория модели:

has_many :listings
CATEGORY = %w{ cat1 cat2 cat3 cat4 }

Вид:

<% @categories.each do |cat| %>
  <%= link_to cat.name, listings_path(:category_id => @listings) %>
<% end %>

Вот моя схема (список и категория):

  create_table "categories", force: :cascade do |t|
    t.string "name"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  create_table "listings", force: :cascade do |t|
    t.string "name"
    t.text "description"
    t.decimal "price"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.string "image"
    t.integer "user_id"
    t.integer "category_id"
    t.index ["category_id"], name: "index_listings_on_category_id"
  end

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

1 Ответ

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

Я хочу добавить отдельную функцию, в которой вы можете щелкнуть ссылку, категорию, чтобы затем отобразить продукты в этой категории

Вы делаете это неправильно.Вы должны передать категорию в помощнике пути и отфильтровать списки для этой категории

#view
<%= link_to cat.name, listings_path(:category => cat) %>

#controller
def index
  if params[:search]
    @listings = Listing.search(params[:search]).order(created_at: :desc)
  #add this line
  elsif params[:category]
    @listings = Category.find(params[:category]).listings
  else
    @listings = Listing.all.order(created_at: :desc)
  end
  @categories = Category.all
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...