如何在Rails中为模型属性创建我的特定错误消息?

时间:2014-06-20 18:03:38

标签: ruby-on-rails ruby ruby-on-rails-3

我有我的模特:

class Course < ActiveRecord::Base
      include ActiveUUID::UUID
       validates :location, :description, presence: true
end

和DB模型:

class CreateCourses < ActiveRecord::Migration
  def change
    create_table :courses, :id => false do |t|
      t.uuid :id, :primary_key => true, :null => false
      t.datetime :date_start, :null => false
      t.float :price, :null => false
      t.datetime :date_end
      t.text :description
      t.text :location, :null => false
      t.uuid :mentor_uuid
      t.timestamps
    end
  end
end

和我在控制器中的方法,我通过ajax:

  def create
     @course  = Course.new(params.require(:course).permit(:description, :location))
    if @course.save
     render json: @course, status: 200
    else
       render json: @course.errors.full_messages, status: 400
    end 
  end

这是我的ajax电话:

var course = {"description" : "Timo", 'location' : 'hahahah'};
    $scope.test = function(){
        $http.post('api/courses.json', course).success( function (data) {
        }).success(function(data){
            console.log(data);
        }).error(function(data){

            console.log(data);
        });
  };

所以这给我带来了一个错误:["Date end can't be blank", "Date start can't be blank", "Price can't be blank"],但如果我想将错误消息更改为我的特定错误,该怎么办?此外,出错时它只返回错误,我做轨道也会返回&#34; old&#34; faild的模型,所以用户不必再次面对墙壁,并从头开始再次输入所有文本?

1 个答案:

答案 0 :(得分:1)

属性名称

根据this answer&amp; this one,您遇到的核心问题是您的attribute名称正在添加错误消息。解决此问题的方法是如何从错误消息中删除attribute名称:

#config/locales/en.yml
en:
  errors:
    format: "%{message}"
     

默认为%{attribute} %{message}

-

我们之前已经这样做了,虽然我认为这不适用于Rails 4:

<%= @model.errors.full_messages.each do |attribute, message| %>
   <%= message %>
<% end %>