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:
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?
Làm thế nào để thay đổi partials/flash của tôi để nó sẽ hoạt động?
Cảm ơn!