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!