Rails打印“不能为空”而不是我的自定义错误消息

时间:2014-12-29 07:37:23

标签: ruby-on-rails

在用户模型中,我写道:

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 %>

昨天它有效!但今天 - 不!我什么都没改变!

2 个答案:

答案 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 %>