2010-11-07 3 views
7

Tôi đang sử dụng một tuyến đường nhưLàm cách nào để chỉ nhận chuỗi truy vấn trong tuyến đường Rails?

match "/v1/:method" => "v1#index" 

Ý định của tôi ở đây là nắm bắt được tên của phương pháp api và sau đó gửi yêu cầu đến phương pháp mà bên trong bộ điều khiển.

def index 
    self.send params[:method], params 
end 

Tôi đã tìm ra điều này sẽ gửi các tham số khác làm đối số cho phương thức nhưng không hoạt động. Vì vậy, câu hỏi của tôi là làm thế nào tôi có thể vượt qua các tham số phi phương pháp trong một chuỗi truy vấn?

+0

+1. Hấp dẫn. – Zabba

Trả lời

7

#query_parameters thực hiện chính xác những gì bạn muốn:

request.query_parameters 

Nó cũng là giải pháp hiệu quả nhất vì nó không xây dựng một băm mới, giống như những cái khác làm.

6

tôi loại giải quyết vấn đề này bằng cách làm này:

params.except("method","action","controller") 
14

bị đánh cắp từ công việc của một đồng nghiệp. Tôi tìm thấy điều này một giải pháp nhẹ mạnh mẽ hơn, vì nó sẽ làm việc ngay cả khi có sự thay đổi các thông số đường dẫn:

params.except(*request.path_parameters.keys) 
+0

Đây phải là câu trả lời được chấp nhận –

+0

@ChrisBeck Có một cách tốt hơn nữa. Xem câu trả lời của tôi. – Agis

+0

Thật vậy. Dễ dàng hơn nhiều với lý do. –