我復制了一個現有的 rails repo,但我發現了兩種將訊息呈現到不同網頁中查看檔案的方法。
這是第一個,它可以將控制器中的“通知”或“警報”呈現給網頁。
<% 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 %>
我想知道它們之間的本質區別是什么?他們可以互相替代嗎?
uj5u.com熱心網友回復:
我想知道它們之間的本質區別是什么?
這是兩個完全不同的概念。
第一個是迭代flash。這基本上只是一個簡單的基于 cookie 的存盤,用于將諸如字串、散列或陣列之類的原語傳遞給下一個請求。在重定向后向用戶顯示訊息時通常使用閃光燈。
例如:
def deny_access
flash[:alert] = "You must be signed in."
redirect_to new_session_path
end
您還可以使用 為當前請求設定閃爍訊息flash.now。每次請求后都會從舊訊息中清除閃存。Flash 通常用作一種系統范圍的公告系統,并在頁面頂部顯示為橫幅。
第二個是(糟糕地)通過ActiveModel::Errors附加到模型的特定實體的實體進行迭代。.valid?這是在模型實體上呼叫(通常是間接)時填充的驗證錯誤集合。
您在顯示當前請求周期中模型的驗證錯誤時使用它。通常在表單的頂部或行內的相應輸入中。
由于此資料只是存盤在記憶體中的實體變數中,因此它不會在重定向之間持續存在。
他們可以互相替代嗎?
不——不是。兩者都用于提供用戶反饋,但它們是解決不同作業的非常不同的工具。但這并不能真正阻止一些菜鳥嘗試。
看:
- https://guides.rubyonrails.org/action_controller_overview.html#the-flash
- https://guides.rubyonrails.org/active_record_validations.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/444948.html
標籤:轨道上的红宝石
上一篇:Rails質量分配has_and_belongs_to_many
下一篇:更改模型中的值,添加所寫內容
