2011-11-01 36 views
8

Tôi không thể tìm ra lý do tại sao các khung nhìn của đường ray không nhận ra flash [: notice] hoặc flash [: error]. Tôi tiếp tục nhận được lỗi sau liên quan đến việc xem một phần được hiển thị. Lỗi cụ thể là:Rails flash [: notice] luôn luôn nil

ActionView :: Mẫu :: Lỗi (Bạn có đối tượng nil khi bạn không mong đợi! Có thể bạn đã mong đợi một phiên bản của mảng. Đã xảy ra lỗi khi đánh giá không. []):

Trong điều khiển của tôi, tôi có

def index 
    @organisms = Organism.all 
    flash[:error] = "test" 
    flash[:notice] = "test" 
    respond_to do |format| 
     format.html 
     format.json { render :json => @organisms } 
    end 
    end 

Trong file index.html.erb tôi render ra một phần thông qua:

<%= render "shared/flash" %> 

Phần có đoạn mã sau.

<div id="flashes"> 

    <% if flash[:notice] %> 
    <p id="flash_notice" class="messages notice"><%= flash[:notice] %></p> 
    <%= javascript_tag "$('#flash_notice').effect('highlight',{},1000);" %> 
    <% end %> 
    <% if flash[:error] || flash[:errors] %> 
    <p id="flash_errors" class="messages errors"><%= flash[:error] || flash[:errors] %></p> 
    <%= javascript_tag "$('#flash_errors').effect('highlight',{},1000);" %> 
    <% end %> 

    <% flash[:error] = flash[:errors] = flash[:notice] = nil %> 
</div> 

Tuy nhiên, nếu thay vì render partial Tôi ném vào <% = thông báo%> nó ám ra thông báo.

Nếu tôi lấy mã một phần và dán nó vào đầu tệp index.html.erb nó hiển thị chính xác. Vì vậy, tôi giả định rằng tôi đang hiển thị một phần xem sai?

Bất kỳ trợ giúp nào được đánh giá cao. Cảm ơn!

+1

Bạn đang thiếu một phần quan trọng: làm thế nào bạn đang render partial. Ngoài ra, không bỏ đặt đèn flash ở phía dưới. Rails đã làm điều đó cho bạn. –

+0

Cảm ơn thông tin. Tôi đã thêm vào cách tôi vẽ một phần. –

+1

u không cần phải làm điều này <% flash [: lỗi] = flash [: lỗi] = flash [: thông báo] = nil%> –

Trả lời

26

Không đặt tên cho đèn flash một phần của bạn. Ruby on Rails tạo một biến cục bộ có cùng tên với phần. Trong trường hợp của bạn, một biến cục bộ flash đang được tạo.

Đổi tên một phần của bạn thành một thứ khác với flash và nó sẽ hoạt động.

Ngoài ra, bạn không cần phải đặt flash thành 0 ở cuối phần của mình. Hãy để Rails chăm sóc điều đó cho bạn.

+0

Đặt tên một phần "_flash" là vấn đề của tôi. Cảm ơn Robert vì đã chỉ ra điều này. Tôi sẽ không bao giờ tìm ra nó. –

+0

Cảm ơn cảm ơn! Tôi sẽ không bao giờ tìm ra điều đó ... – deivid

2

Bạn phải vượt qua đèn flash với một phần:

<%= render 'shared/flash', flash: flash %> 

Hoặc lâu hơn một chút:

<%= render partial: 'shared/flash', locals: { flash: flash } %> 
Các vấn đề liên quan