2009-07-22 39 views
10

Khi tôi phát triển kỹ năng RoR của mình với một số hướng dẫn cơ bản, tôi gặp phải sự cố. Những gì tôi đang cố gắng đạt được là có nhận xét thuộc về bài đăng, không có chỉ mục riêng hoặc chế độ xem riêng lẻ. Phần này rất dễ.Định tuyến đoạn mã định tuyến và URI

Đây là vấn đề khó khăn. Tôi muốn post_comment_url để trả lại địa chỉ với fragment identifier: http://example.com/posts/2#comment-4. Nó sẽ cho phép tôi sử dụng redirect_to ở dạng đơn giản nhất, không có tham số :anchor (có thể chống lại cách ruby ​​ để giữ mọi thứ đơn giản).

Làm cách nào để thực hiện điều đó?

Trả lời

12

Thay vì thay đổi hành vi mặc định Rails', có lẽ nó muốn được tốt hơn để quấn lên nhu cầu của bạn trong một phương pháp helper:

# in app/controllers/application_controller.rb 
class ApplicationController 
    helper :comment_link 

    def comment_link(comment) 
    post_comment_url(comment.post, comment, :anchor => "comment-#{comment.id}") 
    end 
end 

Các cuộc gọi đến helper sẽ cho phép bạn truy cập vào phương pháp mà trong quan điểm của bạn như cũng như bộ điều khiển của bạn.

+0

Có lẽ đây là giải pháp tốt, nhưng tôi không thích ý tưởng về trình bao bọc này vì nó sẽ phá vỡ quy ước sử dụng phương thức post_comment_url gốc. Tôi cũng lưu ý, rằng tôi sẽ cần một người trợ giúp khác cho post_comment_path. Vì nó là giải pháp làm việc, tôi không nghĩ rằng nó đủ khô. – samuil

+0

Bất chấp quy ước Rails đối với post_comment_url bằng cách trả về url bài đăng với neo nhận xét có xu hướng dẫn đến nhức đầu lớn hơn cần phải chuyển tùy chọn: anchor mọi lúc (điều tôi thực sự nói là cách tốt hơn, vì nó mô tả ý định rõ ràng hơn .) Tôi cũng cảnh báo việc sử dụng DRY làm lý do để làm hầu hết mọi thứ. Thuật ngữ DRY giống như từ Agile: nó mô tả một tập hợp các nguyên tắc và thực tiễn, nó hầu như không có nghĩa gì cả. – nakajima

+2

DRY không phải là tập hợp các nguyên tắc bí ẩn. Nó chỉ có nghĩa là: mọi thông tin sẽ chỉ xuất hiện một lần trong mã, và thiết kế nên làm cho nó rõ ràng ở đâu. Nếu không có giải pháp nào tốt hơn helper (tôi vẫn còn khá mới với Rails, vì vậy không thể nói gì cả nếu nó dễ thực hiện giải pháp bằng cách thay đổi một số phương thức mặc định và xem xét nó thông minh) Tôi tin rằng nó sẽ được chứa trong một số phiên bản Rails tương lai. – samuil

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