2012-02-25 62 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