2012-02-01 2 views
0

У меня есть модель под названием «Бронирование», при создании это должно проверить, найдена ли ассоциация. Код:Rails 2.3 выборочная проверка с помощью цикла для проверки наличия

def price_details 
    variant.tour.price_details.each do |pd| 
     if category == pd.category 
     if date_from >= pd.from_date && date_from <= pd.to_date 
      return true 
     else 
      errors.add_to_base('error message') 
      return false 
     end 
     end 
    end 
    nil 
    end 

Бронирование belongs_to вариант и variant_id сохраняется при бронировании. date_from также является полем в модели бронирования.

Когда я пытаюсь выполнить проверку, я получаю NoMethodError: undefined метод `tour 'для nil: NilClass.

Как я могу получить доступ к варианту перед созданием?

EDIT:

По-прежнему возникают проблемы с этим, так что давайте попробуем его в консоли.

b = Booking.new 
b.valid? 
=> NoMethodError: undefined method `tour' for nil:NilClass 

variant.tour.price_details.each do | pd | это линия, которая терпит неудачу. То же самое происходит, если я

b = Booking.new(:variant_id => params[:variant_id]) 

ответ

0

Для того чтобы получить методы Variant в и свойства от заказа убедитесь, что вы назначили variant_id в свой новый экземпляр бронирования, как это: booking = Booking.new(:variant_id => params[:variant_id]). Затем вы можете вызвать метод сохранения при бронировании. Я предполагаю, что variant_id доступен в параметре хэш методов вашего контроллера.

+0

Я пытаюсь получить заказ. Выбранный пользователем выбран. Бронирование принадлежит варианту. Пользователь может выбрать вариант из формы, и он будет сохранен в таблице бронирования как variant_id. – amunds

+0

Я отредактировал мой оригинальный вопрос в отношении belongs_to. – amunds

+0

Имеет ли option_id? Попробуйте проверить метод before_save в консоли, чтобы увидеть, действительно ли 'Booking.new (...). Вариант' фактически не равен нулю. –

0

Его просто потому, что связанная запись не найдена, поэтому возвращается NIL. b = Booking.new(:variant_id => params[:variant_id]) здесь variant_id не находится в variants стол

Смежные вопросы