2012-08-08 32 views
33

Tôi mới vào đường ray 3, tôi muốn thêm (: target => "_blank") để link_to helper dướilink_to với mục tiêu trống

link_to "GOOGLE", 'http://www.google.com', class: "btn btn-large btn-primary" 

Nhưng tôi muốn sử dụng các application_helper để xác định link_to phương pháp.

  1. Làm cách nào để xác định link_to methd trong application_helper?
  2. Làm cách nào để chuyển lớp: "btn btn-btn-primary lớn" trong phương thức link_to?

Cảm ơn bạn đã hỗ trợ của bạn ...

Trả lời

81

Tại sao bạn sẽ muốn ghi đè link_to? Nó đã được xác định trong Rails, chỉ cần sử dụng nó như thế này:

link_to "GOOGLE", "http://www.google.com", target: "_blank", class: "btn btn-large btn-primary" 

Edit: OK, hiểu. Tôi muốn khuyên chống lại trọng một phương pháp phổ biến như vậy để tạo ra một số khác:

def link_to_blank(body, url_options = {}, html_options = {}) 
    link_to(body, url_options, html_options.merge(target: "_blank")) 
end 

Nó nên làm các trick

+0

Cảm ơn bạn đã trả lời nhanh chóng. Tôi không muốn lặp lại bản thân mình (DRY), bằng cách đặt: target => "_blank" trong mỗi helper link_to .. vì vậy tôi đã suy nghĩ để hợp nhất: target => "_blank" với helper link_to bằng cách tạo một phương thức trong application_helper. Nhưng tôi gặp khó khăn để vượt qua lớp học: "btn btn-btn-primary lớn" cho phương thức link_to mới trong application_helper. – joe

+0

Ok đã chỉnh sửa câu trả lời của tôi, hãy xem. Sử dụng 'link_to_blank' thay vào đó, tôi sẽ khuyên bạn không nên ghi đè' link_to' vì nó là phương thức được sử dụng rộng rãi. –

+0

Link_to_blank hoạt động giống như một sự quyến rũ và nó đã làm các trick! Cảm ơn rất nhiều. – joe

4

Thêm vào câu trả lời của Anthony, điều này gần giống với nhiều link_to thực hiện Rails', bao gồm hỗ trợ cho các khối và không có tham số:

def link_to_blank(name = nil, options = nil, html_options = nil, &block) 
    target_blank = {target: "_blank"} 
    if block_given? 
    options ||= {} 
    options = options.merge(target_blank) 
    else 
    html_options ||= {} 
    html_options = html_options.merge(target_blank) 
    end 
    link_to(name, options, html_options, &block) 
end 
Các vấn đề liên quan