将模型错误保存到闪存 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>
我想将带有模型错误的散列添加到闪存中,然后再重定向。这是控制器:
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>