Bạn có chắc mình đã xác định phương thức lớp search trong item.rb ? Nguyên nhân do lỗi thông báo rằng không có search phương thức được xác định trên Item lớp. Tuy nhiên, hãy thử nếu cách sau phù hợp với bạn.
Bạn chỉ muốn tìm kiếm nếu biểu mẫu đang được gửi. Bạn có thể sử dụng present? để biết liệu cụm từ tìm kiếm có thực sự được chuyển qua hay không.
Sửa đổi bộ điều khiển của bạn thành
def index
@items = params[:search].present? ? Item.search(params[:search]) : Item.all
end
Lưu ý rằng một đối tượng là present chỉ khi nó không trống. Điều này rất hữu ích vì nếu ai đó nhập "" vào biểu mẫu, bạn không nên tìm kiếm khoảng trống trong nombre nhưng hiển thị tất cả các bản ghi trong các mục items bảng.
Nếu biểu mẫu không được gửi, Item.all sẽ được thực thi.
Sửa đổi phương thức lớp của bạn thành
def self.search(search_term)
where("nombre LIKE ?", "%#{search_term}%")
end
Bạn không cần Item.where vì lớp Item là ngữ cảnh hiện tại mà where phương thức được gọi. Lưu ý rằng tôi đã thay đổi mẫu thành %#{search_term}% vì bạn không phải lúc nào cũng muốn khớp các chuỗi kết thúc bằng một số mẫu.
Hy vọng điều này sẽ hữu ích!