2011-01-25 26 views
9

Tôi đã đoạn mã sau vào bộ điều khiển của tôiTại sao: Thông báo không hiển thị sau khi chuyển hướng trong Rails 3

def create 
    @tv_show = TvShow.new(params[:tv_show]) 

    respond_to do |format| 
     if @tv_show.save 
     format.html { redirect_to(tv_shows_path, :notice => 'Tv show was successfully created.') } 
     format.xml { render :xml => @tv_show, :status => :created, :location => @tv_show } 
     else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @tv_show.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

và sau đây trong tv_shows tôi/index.html.erb

<div id="notice"><%= notice %></div> 

nhưng khi Tôi tạo một mục mới thông báo thông báo không xuất hiện sau khi chuyển hướng đến tv_shows_path. Có ai biết tại sao không?

Trả lời

0

Lý do tại sao mã không làm việc là một vấn đề với mã xác thực của tôi ... Sau khi tôi thực hiện phương pháp mới của tôi về xác thực từ đầu mã ở trên đang hoạt động.

+3

Tôi tự hỏi nếu bạn có thể cụ thể. Tôi gặp vấn đề tương tự, và câu trả lời này không giúp được gì. Bộ điều khiển của tôi có 'before_filter: authenticate_user!'. Là sai đó? –

+0

Xin lỗi nhưng tôi không biết vấn đề này là gì một năm trước. Tại thời điểm này tôi sử dụng has_secure_password kể từ Rails 3.1 và điều này làm việc thực sự tuyệt vời cho tôi. http://railscasts.com/episodes/270-authentication-in-rails-3-1 – maveonair

17

Có lý do nào bạn đang cố sử dụng :notice chứ không phải flash[:notice]?

Bộ điều khiển:

respond_to do |format| 
    if @tv_show.save 
    format.html { 
     flash[:notice] = 'Tv show was successfully created.' 
     redirect_to tv_shows_path 
    } 
    format.xml { render :xml => @tv_show, :status => :created, :location => @tv_show } 
    else 
    format.html { render :action => "new" } 
    format.xml { render :xml => @tv_show.errors, :status => :unprocessable_entity } 
    end 
end 

Xem:

<% if flash[:notice] %> 
    <div id="notice"><%= flash[:notice] %></div> 
<% end %> 
+0

Tôi nghĩ rằng Shaun là đúng về Chế độ xem, nên là "flash [: notice]". –

+0

Tôi đọc rằng đây sẽ là cách mới với phiên bản ray 3 ... Nhưng tôi sẽ cố gắng gợi ý của bạn, cảm ơn! – maveonair

+0

@Fabian: Công việc này có phù hợp với bạn không? – Shaun

4

Tôi gặp phải 'sự cố' tương tự và nguyên nhân là do tôi đã chuyển hướng đến hành động mà bản thân nó có một chuyển hướng khác. Trong trường hợp trên, nguyên nhân có thể xảy ra nhất là trong phạm vi tv_shows_path một chuyển hướng khác tồn tại.

Trong trường hợp của tôi, tôi có một cái gì đó như thế này trong một bộ lọc:

redirect_to root_url, notice: 'Unauthorized access!' 

root_url được thành lập để trỏ đến home#index:

# Home controller 
def index 
    if user_signed_in? && current_user.admin? 
    redirect_to users_path 
    else 
    redirect_to customers_path 
    end 
end 

redirect_to thứ hai này đã gây ra thông báo 'unauthorized_access' của tôi không để hiển thị.

Giải pháp là chỉ cần chuyển hướng đến customers_path ngay lập tức chứ không phải root_url. Hy vọng điều này sẽ giúp một ai đó.

+1

Hoặc, bạn có thể thực hiện 'flash.keep' trong đó chuyển hướng thứ hai xảy ra (trước lệnh gọi' redirect_to'). Đây là những gì tôi đã làm và nó có vẻ hoạt động như mong đợi. – Koby

1

Tôi vừa gặp sự cố tương tự và lỗi quá ngớ ngẩn nhưng đôi khi không đáng chú ý.

tôi có trong bố trí ứng dụng của tôi đoạn mã sau:

<div id="content" > 
    <div class="wrapper"> 
     <% flash.each do |name, msg| %> 
      <% content_tag :div, msg, class: "flash #{name}"%> 
     <% end %> 
     <%= yield %> 
    </div> 
</div> 

Bây giờ, bạn có thể thấy lý do tại sao tôi đã không thể nhìn thấy thông báo flash của tôi?

Yup! Bạn nên kiểm tra xem bạn có đặt dấu hiệu = tại đây:

<%= content_tag :div, msg, class: "flash #{name}"%> 
+1

Trong 'content_tag', nó phải là' msg' thay vì ': msg' –

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