5

thể trùng lặp:
Flash Messages in Partials (Rails 3)Railstutorial: Đưa thông điệp flash vào một phần sản lượng lỗi "undefined method` each 'for nil: NilClass "?

Tôi đang làm Railstutorial Michael Hartl và listing 7.26 thêm thông điệp flash để bố trí ứng dụng:

<!DOCTYPE html> 
<html> 
. 
. 
. 
    <body> 
    <%= render 'layouts/header' %> 
    <div class="container"> 
     <% flash.each do |key, value| %> 
     <div class="alert alert-<%= key %>"><%= value %></div> 
     <% end %> 
     <%= yield %> 
     <%= render 'layouts/footer' %> 
     <%= debug(params) if Rails.env.development? %> 
    </div> 
    . 
    . 
    . 
    </body> 
</html> 

này hoạt động tốt.

Tuy nhiên, tôi đã cố gắng để làm sạch mã này bằng cách tạo ra một _flash.html.erb trong thư mục một phần của tôi ...

<% flash.each do |key,value| %> 
    <%= content_tag(:div, value, class: "alert alert-#{key}") %> 
    <!-- <div class="alert alert-<%= key %>"><%= value %></div> --> 
<% end %> 

... và vì sử dụng ...

<%= render 'partials/flash' %> 

... trong bố cục ứng dụng của tôi, tất cả các kiểm tra Rspec của tôi đều bắt đầu thất bại với thông báo sau cho mỗi bài kiểm tra:

Failure/Error: before { visit signup_path } 
ActionView::Template::Error: 
    undefined method `each' for nil:NilClass 

Phím Vấn đề có vẻ là flash mà là con số không vì gói _flash của tôi một phần trong một câu lệnh if như thế này ...

<% unless flash.empty? %> 
    <% flash.each do |key,value| %> 
    <%= content_tag(:div, value, class: "alert alert-#{key}") %> 
    <!-- <div class="alert alert-<%= key %>"><%= value %></div> --> 
    <% end %> 
<% end %> 

... mang lại được thông báo lỗi như vậy về NilClass như trên và gói nó trong một câu lệnh if như thế này ...

<% if flash %> 
    <% flash.each do |key,value| %> 
    <%= content_tag(:div, value, class: "alert alert-#{key}") %> 
    <!-- <div class="alert alert-<%= key %>"><%= value %></div> --> 
    <% end %> 
<% end %> 

... ngắt thông báo flash hoạt động (vì 'nếu flash' luôn sai).

Tôi có hai câu hỏi liên quan:

  1. Tại sao/cách chính xác không bằng cách sử dụng partials/giải pháp đèn flash thay đổi hành vi của một ứng dụng đường ray?

  2. Làm thế nào để thay đổi partials/flash của tôi để nó sẽ hoạt động?

Cảm ơn!

Trả lời

3

Set người dân địa phương với một hash của params/giá trị để vượt qua các phần

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