将模型错误保存到闪存 Rails 5

Save Model errors to flash Rails 5

我想将带有模型错误的散列添加到闪存中,然后再重定向。这是控制器:

def update
    current_user.update_attributes(user_params)
    if current_user.errors.any?
        flash.keep[:errors] = current_user.errors.messages
    end
    byebug
    redirect_to edit_path
end

这是观点:

<div>
    <%=f.text_field :fname, placeholder: 'First Name', limit:50 %>
        <span><%=flash[:errors][:first_name]%></span>
</div>

<div>
    <%=f.text_field :lname, placeholder: 'Lirst Name', limit:50 %>
    <span><%=flash[:errors][:last_name]%></span>
</div>

使用 byebug,如果我用无效数据填写输入并在控制台中键入 flash[:errors],我会看到此输出哈希:

{:first_name=>["First name must be minimum 1 character", "is invalid"], :last_name=>["is too short (minimum is 1 character)", "is invalid"]}

如果我在视图中添加 <span><%=flash[:errors][:first_name]%></span>,但是 :

<%=flash[:errors]%>

我在 HTML 中看到与字符串相同的散列:

<span>
   {"first_name"=>["First name must be minimum 1 character", "is invalid"],
   "last_name"=>["is too short (minimum is 1 character)", "is invalid"]}
</span>

如何在 Rails 5 中添加和使用带有 Flash 消息的散列?

由于您的哈希值正在从符号键更改:

{ :first_name => ..., :last_name  => ... }

字符串键:

{ "first_name" => ..., "last_name"  => ... }

那么您可以尝试以字符串形式访问它们,而不是像现在那样以相反的方式进行访问,例如:

<span>
  <%= flash[:errors]['first_name'] %>
</span>