英文:
Showing Flash-messages with loop vs using if-exists
问题
第一种方式和第二种方式都可以用来显示闪存消息。但它们之间的区别在于数据结构的不同以及如何提取消息。
在第一种方式中,闪存消息被存储在一个字典中,其中键是消息的类型(例如,"success"或"danger"),而值是消息内容。在循环中,我们遍历字典中的每个键值对,然后将消息内容显示在HTML中。
而在第二种方式中,消息被存储在不同的变量中,具体是notice
和alert
。这种方式更加简单,因为我们不需要遍历字典,只需要检查这些变量是否存在,然后将它们显示在HTML中。这是因为Rails框架已经将消息从闪存中提取到了这些变量中。
所以,第一种方式需要遍历字典以显示消息,而第二种方式则不需要,因为消息已经以单独的变量形式提供。
英文:
What's the difference between showing flash-messages using ...
<% flash.each do |type, msg| %>
<div class="alert alert-info">
<%= msg %>
</div>
<% end %>
... and using ...
<% if notice %>
<p class="alert alert-success"><%= notice %></p>
<% end %>
<% if alert %>
<p class="alert alert-danger"><%= alert %></p>
<% end %>
?
I have tried both pattern and both worked.
Why is 'notice' as variable in the second case? In the first case it's a dictionary.
What happens there (in the second case)? Why doesn't have it to be unpacked?
答案1
得分: 3
notice()
便捷访问器用于 flash[:notice]
。
# 文件 actionpack/lib/action_dispatch/middleware/flash.rb,第 271 行
def notice
self[:notice]
end
英文:
Quote from the Ruby on Rails documentation
:
> notice()
>
> Convenience accessor for flash[:notice]
.
>
> # File actionpack/lib/action_dispatch/middleware/flash.rb, line 271
> def notice
> self[:notice]
> end
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论