2012-10-01 28 views
6

Tôi đang sử dụng lệnh sort_link của Ransack trong dự án đường ray để hiển thị danh sách các khoản phí cho mô hình thanh toán của tôi. Tuy nhiên, 'fee_amount' không phải là thuộc tính của mô hình thanh toán, nhưng thay vào đó là phương thức lớp của mô hình hóa đơn (thuộc về thanh toán). Những gì tôi đang có là:Sử dụng Ransack sort_link cho các thuộc tính

<% = sort_link @search,: bill_fee_amount, "Convenience Fee" %>

cần truy cập vào hóa đơn của hiện tại thanh toán và gọi Phương thức 'fee_amount' trên số hóa đơn , một số tính toán và trả về số dư. Đó là những phao nổi mà tôi hy vọng tìm kiếm.

Điều này có thể được thực hiện hay tôi chỉ có thể sắp xếp theo các thuộc tính của mô hình mà tôi đang xử lý?

Trả lời

0

Ransack là người kế thừa MetaSearch và theo tài liệu MetaSearch, bạn có thể tạo các tìm kiếm tùy chỉnh. Đây là liên kết:

https://github.com/ernie/meta_search

Tôi nghĩ rằng một cái gì đó như thế này sẽ làm việc:

scope :sort_by_bill_fee_amount_asc, joins(:bill).select('sum("bills"."fee_amount") AS bill_fee_amount').order('bill_fee_amount ASC') 
scope :sort_by_bill_fee_amount_desc, joins(:bill).select('sum("bills"."fee_amount") AS bill_fee_amount').order('bill_fee_amount DESC') 

Câu hỏi đặt ra là không rõ ràng về những gì các tính toán là chính xác vì vậy tôi cho rằng nó chỉ là một tổng của một trường được gọi là fee_amount. Thật không may, nó có thể tồi tệ hơn nhiều và tôi nghĩ rằng việc tính toán SQL khó chịu sẽ cần phải được bao gồm trong mô hình Payment. Điểm mấu chốt mà tôi nghĩ là SQL cần bao gồm cột bạn đang sắp xếp để bạn cần SQL tính toán nó và đưa nó vào với tên Ransack muốn tìm kiếm.

Tôi hy vọng điều đó sẽ hữu ích.

+2

Kiểm tra này [vấn đề] (https://github.com/ernie/ransack/issues/61). Ransack không có chức năng giống như meta_search. Bên trong, nó luôn sử dụng mô hình như được định nghĩa trong cơ sở dữ liệu, và tôi không thể làm cho nó sử dụng các bảng tạm thời được tạo bởi các phạm vi –

2

Bạn không thể bị ransack như nó đến, nhưng kiểm tra this issue. Có vẻ như một số người đã tạo bản vá cho chức năng này, nhưng tôi chưa thử chúng.

Ransack, nội bộ, nó luôn sử dụng mô hình như được xác định trong cơ sở dữ liệu và tôi không thể sử dụng mô hình tạm thời do các phạm vi tạo ra.

PD: làm lại bình luận như một câu trả lời như tôi luôn luôn trở về với câu hỏi này: P

Các vấn đề liên quan