在用户模型中,我写道:
class User < ActiveRecord::Base
has_secure_password
validates :name, :presence => { allow_blank: false, message: "This field can't be empty" }
end
但它打印出“不能空白”。这有什么问题?
更新
def create
@user = User.new(user_params)
if @user.save
redirect_to "http://bookworm.az:3000"
else
session[:name] = @user.name
session[:username] = @user.username
session[:email] = @user.email
error = @user.errors.to_a.to_sentence(two_words_connector: ',')
delimeter = error.split
error = error.gsub(delimeter[0], '')
show_error = error.split(",")
flash[:notice] = show_error[0]
redirect_to :back
end
查看代码:
<% if flash[:notice] %>
<p class="error">
<%= flash[:notice] %>
</p>
<% end %>
昨天它有效!但今天 - 不!我什么都没改变!
答案 0 :(得分:3)
使用区域设置显示自定义错误消息,因为这是最推荐的方式:
# config/locales/en.yml
en:
activerecord:
attributes:
user:
name: ""
errors:
models:
user:
attributes:
name:
blank: "This field can't be empty"
嘿,您可以在Rails应用程序中默认看到config/locales/en.yml
文件。因此,请使用它,因为您要自定义错误消息,这是建议的方式。如果它是直接的,那么在Model
本身就很容易做到。
<强>型号:强>
class User < ActiveRecord::Base
has_secure_password
validates_presence_of :name
end
<强>控制器:强>
def create
@user = User.new(user_params)
if @user.save
redirect_to "http://bookworm.az:3000"
else
render :new
end
end
查看:强>
<%= @user.errors.full_messages.first if @user.errors.any? %>
请尝试如上。希望它有所帮助:)
答案 1 :(得分:1)
你可以试试这个
# config/locales/en.yml
en:
activerecord:
attributes:
name: "Name"
errors:
models:
user:
attributes:
name:
blank: "This field can't be empty"
在控制器中
def create
@user = User.new(user_params)
if @user.save!
redirect_to "http://bookworm.az:3000"
else
render :new
end
end
在视图中
<%= form_for @user do |f| %>
<% if @user.errors.any? %>
<ul>
<% @user.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
....
<% end %>