validates_associated и validates_presence_of, не работающий как ожидалось с rspec?

Если вы хотите сделать это через файл .env, тогда это должно быть:

PYTHONPATH=/path/to/zip
6
задан BvuRVKyUVlViVIc7 15 April 2009 в 18:16
поделиться

4 ответа

Если вы хотите, чтобы ваша модель работала таким образом, измените это:

validates_presence_of :receiver_id, :sender_id

на

validates_presence_of :receiver, :sender
11
ответ дан 8 December 2019 в 14:47
поделиться

Хм ..

после того, как я нашел только эту запись в блоге и wont-fix билет в маяк рельсов:

Запись в блоге с решением

Билет на маяк

Я переключился на собственное решение:

class Friendship < ActiveRecord::Base
  belongs_to :sender, :class_name=>'User', :foreign_key=>'sender_id'
  belongs_to :receiver, :class_name=>'User', :foreign_key=>'receiver_id'

  validates_presence_of :receiver_id, :sender_id

  validate :sender_exists
  validate :receiver_exists

  protected
  def sender_exists
    errors.add("sender_id", "not existant") unless User.exists?(self.sender_id)
  end  
end
1
ответ дан 8 December 2019 в 14:47
поделиться

Есть также старый плагин, который делает это ... validates_existence_of .

http://blog.hasmanythrough.com/2007/7/14/validate-your-existence

2
ответ дан 8 December 2019 в 14:47
поделиться

Документация Rails для validates_associtated гласит следующее:

ПРИМЕЧАНИЕ. Эта проверка не будет потерпеть неудачу, если связь не была назначена. Если вы хотите убедиться, что ассоциация присутствует и гарантированно действительна, вам также необходимо использовать validates_presence_of.

Вы не назначили ассоциацию. Измените ваш тест следующим образом, и он должен пройти:

it "should not be valid with non-existant receiver_id" do
  f = Friendship.new(@valid_attributes)
  f.receiver_id = 99999
  f.receiver = nil  # Note this line
  f.should_not be_valid
end
2
ответ дан 8 December 2019 в 14:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: