2009-10-21 34 views
8

Khi người dùng đăng nhập thất bại trên ứng dụng Rails của tôi, tôi muốn chỉ cho họ đến một trang thiết lập lại mật khẩu:link_to() trong Rails nháy

flash[:notice] = "Login failed. If you have forgotten your password, you can #{link_to('reset it', reset_path)}" 

Tuy nhiên, tôi không thể sử dụng link_to trong một bộ điều khiển . Cách tốt nhất để làm điều này mà không cần trộn điều khiển và xem logic là gì?

Dự đoán tốt nhất của tôi là đèn flash là nơi sai để thực hiện việc này, nhưng tôi đánh giá cao mọi đầu vào.

Trả lời

9

Tôi nghĩ giải pháp phổ biến nhất là gắn liên kết đến trang đặt lại mật khẩu ngay trong biểu mẫu đăng nhập của bạn, vì vậy, thông báo flash của bạn không phải giải quyết vấn đề gì cả. Điều đó cũng cho phép người dùng yêu cầu đặt lại mà không cần đăng nhập lần đầu.

Nếu bạn muốn thực hiện trong thông báo flash, bạn nên sử dụng url_for để tạo liên kết thay vì link_to.

Hoặc, bạn có thể hiển thị một phần thay vì mã hóa cứng thư trong bộ điều khiển của mình.

flash[:error] = render_to_string(:partial => "shared/login_failed_message") 

# in shared/_login_failed_message.html.erb 
<%= "Login failed. If you have forgotten your password, you can #{link_to('reset it', reset_path)}" %> 
+0

Cảm ơn bạn - partial là chính xác những gì tôi cần. – Grandpa

+1

Tôi thấy rằng điều này không hoạt động (trong Rails 3.1) vì tất cả đầu ra được thoát trước khi được hiển thị. Vì vậy, bạn có được thông tin như "Danh sách được lưu vào < a href = "/teams/1 " > Nhóm David Tuite </a >" –

+2

Chỉ cần thêm phương thức .html_safe vào nó và nó sẽ hoạt động. – MarioRicalde

5
flash[:notice] = "Login failed. If you have forgotten your password, you can <a href='#{url_for(reset_path)}'>reset it</a>" 

Đúng, link_to là một cái nhìn helper. Xin vui lòng cho chúng tôi một cách chung chung hơn của việc xây dựng liên kết, à la url_for

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