Rails两种消息渲染方式有什么区别?
What's the difference between the two ways of message rendering in Rails?
我复制了一个现有的 rails 存储库,但我发现了两种在不同网页中呈现消息以查看文件的方法。
这是第一个,可以将controller中的“notice”或“alert”渲染到网页上
<% flash.each do |type, msg| %>
<div>
<%= msg %>
</div>
<% end %>
这是第二个,没机会触发
<% if @task.errors.present? %>
<ol>
<% @task.errors.each do |error, message| %>
<li>WARNING: <%= "#{error.capitalize} #{message}" %>
</li>
<% end %>
</ol>
<% end %>
请问它们的本质区别是什么?它们可以相互替代吗?
I wonder what is the essential difference between them?
这是两个完全不同的概念。
首先是遍历 the flash。这基本上只是一个简单的基于 cookie 的存储,用于将字符串、哈希或数组等原始数据传递给 下一个请求 。 flash 通常在重定向后向用户显示消息时使用。
例如:
def deny_access
flash[:alert] = "You must be signed in."
redirect_to new_session_path
end
您还可以使用 flash.now
为 当前 请求设置即显消息。每次请求后,闪存中的旧消息都会被清除。 Flash 通常用作一种系统范围的公告系统,并在页面顶部显示为横幅。
第二个是(糟糕地)遍历附加到模型特定实例的 ActiveModel::Errors
实例。这是验证错误的集合,当 .valid?
在模型实例上被调用(通常是间接调用)时会被填充。
在当前请求周期中显示模型的验证错误时使用它。通常在表单的顶部或相应输入的内联。
由于此数据仅存储在内存中的实例变量中,因此它不会跨重定向持续存在。
Can they replace each other?
不 - 不是真的。两者都用于提供用户反馈,但它们是解决不同工作的非常不同的工具。虽然并没有真正阻止一些新手尝试。
参见:
我复制了一个现有的 rails 存储库,但我发现了两种在不同网页中呈现消息以查看文件的方法。
这是第一个,可以将controller中的“notice”或“alert”渲染到网页上
<% flash.each do |type, msg| %>
<div>
<%= msg %>
</div>
<% end %>
这是第二个,没机会触发
<% if @task.errors.present? %>
<ol>
<% @task.errors.each do |error, message| %>
<li>WARNING: <%= "#{error.capitalize} #{message}" %>
</li>
<% end %>
</ol>
<% end %>
请问它们的本质区别是什么?它们可以相互替代吗?
I wonder what is the essential difference between them?
这是两个完全不同的概念。
首先是遍历 the flash。这基本上只是一个简单的基于 cookie 的存储,用于将字符串、哈希或数组等原始数据传递给 下一个请求 。 flash 通常在重定向后向用户显示消息时使用。
例如:
def deny_access
flash[:alert] = "You must be signed in."
redirect_to new_session_path
end
您还可以使用 flash.now
为 当前 请求设置即显消息。每次请求后,闪存中的旧消息都会被清除。 Flash 通常用作一种系统范围的公告系统,并在页面顶部显示为横幅。
第二个是(糟糕地)遍历附加到模型特定实例的 ActiveModel::Errors
实例。这是验证错误的集合,当 .valid?
在模型实例上被调用(通常是间接调用)时会被填充。
在当前请求周期中显示模型的验证错误时使用它。通常在表单的顶部或相应输入的内联。
由于此数据仅存储在内存中的实例变量中,因此它不会跨重定向持续存在。
Can they replace each other?
不 - 不是真的。两者都用于提供用户反馈,但它们是解决不同工作的非常不同的工具。虽然并没有真正阻止一些新手尝试。
参见: