2012-02-25 60 views
0

当我试图创建这些记录时,如何从具有多个记录的交叉引用表中返回错误消息?我想这样的:rails 3自定义验证错误消息在连接表中,怎么样?

## activity_set.rb 
class ActivitySet < ActiveRecord::Base 
    has_many :activity_set_lessons 
    has_many :lessons, :through => :activity_set_lessons 

    validates :name, :presence => true 

    def activity_set_lessons=(data) 
    data.each_with_index do |v, i| 
     activity_set_lessons.build(
     :lesson_id => v[:lesson_id], 
     :sort_order => i, 
     :weight_percentage => v[:weight_percentage] 
    ) 
    end 
    end 
end 

## activity_set_lesson.rb 
class ActivitySetLesson < ActiveRecord::Base 
    belongs_to :activity_set 
    belongs_to :lesson 

    validates :lesson_id, :presence => true 
    validates_each :weight_percentage do |record, attr, value| 
    record.errors.add :base, "woot" if value.blank? 
    end 
end 

这是请求数据:从@activity_set

## params[:activity_set] 
"activity_set" => { 
    "name" => "hshshshs", 
    "keywords" => "", 
    "activity_set_lessons" => [ 
    {"weight_percentage" => "", "lesson_id"=>"4"}, 
    {"weight_percentage" => "", "lesson_id"=>"5"} 
    ] 
} 

错误消息,当我做#save:

{ 
    "errors":{ 
    "activity_set_lessons":["is invalid","is invalid"] 
    }, 
    "full_messages":[ 
    "Activity set lessons is invalid","Activity set lessons is invalid" 
    ] 
} 

我总是得到同样的错误即使我在连接表中添加一个自定义的消息。我怎样才能返回如下消息:“woot 1 is wrong”或类似的东西,每次验证?

谢谢。

回答

0

化妆用的accepts_nested_attributes_for

## activity_set.rb 
class ActivitySet < ActiveRecord::Base 
    has_many :activity_set_lessons 
    has_many :lessons, :through => :activity_set_lessons 

    validates :name, :presence => true 

    accepts_nested_attributes_for :activity_set_lessons 
end 

视图将看起来像

= form_for @activity_set do |f| 
    [activity_set form fields ] 
    = f.fields_for :activity_set_lessons do |p| 
    = p.select :lession_id 
    = p.select :weight_percentage 
+0

酷,它的工作原理:)。 – nebiros 2012-02-25 21:56:41