我已经花了好几个小时才找到,似乎还没有找到适合我的解决方案。
我目前有一个有效的搜索字段。
但是我想添加一个单独的功能,您可以在其中单击链接(一个类别),然后显示该类别中的产品。
列表控制器(产品):
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
我的控制器或我的观点是错误的。我以为我的控制器需要更多定义。我该怎么办?
答案 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