rails 3 пользовательских сообщения об ошибках валидации в соединительной таблице, как? - PullRequest
0 голосов
/ 26 февраля 2012

Как я могу вернуть сообщения об ошибках из таблицы перекрестных ссылок с несколькими записями, когда я пытаюсь их создать? Я пытаюсь это:

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

Это данные запроса:

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

Сообщения об ошибках от @activity_set, когда я делаю #save:

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

Я всегда получаю одно и то же сообщение об ошибке, даже если я добавляю пользовательское в таблицу соединений. Как я могу вернуть сообщение вроде: "woot 1 is not" или что-то в этом роде, для проверки?

Спасибо.

1 Ответ

0 голосов
/ 26 февраля 2012

использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...