2011-09-15 24 views
27

Tôi có sau đây trong điều khiển của tôi:nhắn Flash trong chuyển hướng không làm việc

redirect_to signin_path, :notice => "The email is already registered" 

Theo quan điểm của tôi, tôi có

<%= flash[:notice] if flash[:notice] %> 

Nhưng sứ điệp đèn flash không xuất hiện.

Tuy nhiên nếu tôi làm như sau trong bộ điều khiển

flash[:notice] = "There is already an acount for this email. Please Login to create your board." 
redirect_to signin_path 

Nó không làm việc. Lý do đầu tiên không hoạt động là gì?

+0

'Signup_path' và' signin_path' có khác nhau không? –

+1

Tôi đã sửa lỗi. Nó được cho là để đọc signin_path – chell

Trả lời

37

Do một số tail'ing trên các bản ghi của bạn và xem liệu bạn có đang được chuyển hướng đến nhiều hành động trước khi bạn kết xuất hay không. Nếu bạn đang có, nó có khả năng là flash không được giữ đủ lâu để làm cho nó vào xem nơi nó cuối cùng đã được trả lại.

Một vị trí tốt flash.keep(:notice) sẽ thực hiện thủ thuật. Ngoài ra, khi nhìn lại, nếu bạn đang chuyển hướng nhiều lần, tôi khuyên bạn nên thực hiện một số phép tái cấu trúc và loại bỏ mọi bước nhảy không cần thiết bằng cách hợp nhất logic chuyển hướng ở cấp cao hơn để chuyển hướng của bạn được xác định trước và chỉ xảy ra một lần, tối đa hai lần.

+1

Không có ý tưởng về điều này. Brilliant tìm bạn đời. –

+2

Kiểm tra [tại đây] (http://guides.rubyonrails.org/action_controller_overview.html) để biết hướng dẫn đường dẫn ghi chú về điều này. 'flash.keep' nên vào bộ điều khiển trung gian. Tức là, nếu bạn có 'chuyển hướng' đến cây chuyển hướng đến mặt đất, nó sẽ đi vào trong hành động' tree'controller trong đó chuyển hướng thứ hai xảy ra – MrWater

+1

Cũng lưu ý, chỉ sử dụng 'flash.keep' mà không có bất kỳ tham số nào sẽ giữ toàn bộ * flash . –

0

cách tiếp cận tốt nhất là viết những dòng trong tập tin views/layouts/application.html.erb

<%= notice %> 
<%= alert %> 

và viết

layout 'application' trong bộ điều khiển

+0

Tôi đánh giá cao lời khuyên. Bất kỳ ý tưởng tại sao dòng đầu tiên tôi viết không hoạt động? – chell

+0

Bạn không chắc chắn tại sao điều này lại bị giảm giá vì nó hoạt động, vì vậy đây là +1 – Thilo

+0

Điều này khiến tôi vượt qua vấn đề của riêng mình, tôi cần xử lý thông báo qua biểu định kiểu tùy chỉnh của mình. – Snips

6

đơn giản, nhưng hiệu quả:

sửa đổi ApplicationController < ActionController :: Base như sau:

alias :std_redirect_to :redirect_to 
def redirect_to(*args) 
    flash.keep 
    std_redirect_to *args 
end 
+0

Đã lưu hoàn toàn tôi! –

0

IN sử dụng bộ điều khiển:

redirect_to signin_path, :notice => "There is already an acount for this email. Please Login to create your board." 

Trong ứng dụng sử dụng bố trí của bạn:

<%= notice %> 
Các vấn đề liên quan