使用按钮按类别过滤?

时间:2018-10-14 11:32:08

标签: ruby-on-rails ruby

我已经花了好几个小时才找到,似乎还没有找到适合我的解决方案。

我目前有一个有效的搜索字段。

但是我想添加一个单独的功能,您可以在其中单击链接(一个类别),然后显示该类别中的产品。

列表控制器(产品):

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 :(得分:0)

  

我想添加一个单独的功能,您可以在其中单击链接,   类别,然后显示该类别中的产品

您做错了。您应该在路径帮助器中传递 category 并过滤该类别的列表

#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