Оператор Rails if в форме с simple_form и HAML

У меня есть следующий код в форме, который автоматически помещает позицию объекта на вход, используя оператор if, чтобы исключить это при редактировании пользователем.

- if @collection_page.new_record?
  = f.input :position, :label => "Display order:", input_html: { value: Spree::CollectionPage.last.position + 1 }
- else
  = f.input :position, :label => "Display order:"

У меня проблемы, когда записей нет, и при создании первой я получаю обычную ошибку класса nil.

undefined method `position' for nil:NilClass

Что имеет смысл, потому что у меня пока нет записей.

Так что просто нужно добавить немного логики.

Я пытался:

- if @collection_page.new_record? || Spree::CollectionPage.last.position.present? # and @collection_page.last.position.present?

Безуспешно

Ищете чистый способ добиться этого, заранее спасибо за вашу помощь!


person neo    schedule 06.08.2014    source источник
comment
Как будет определяться .last.position, если это новая запись?   -  person Vasseurth    schedule 06.08.2014
comment
Вот что я пытаюсь понять   -  person neo    schedule 06.08.2014
comment
Так что я смущен, почему вы делаете это значение для ввода, если оно не определено   -  person Vasseurth    schedule 06.08.2014
comment
Может быть, я могу проверить, нет ли в Spree::CollectionPage записей, а затем выполнить   -  person neo    schedule 06.08.2014
comment
Он определяется после создания первой записи   -  person neo    schedule 06.08.2014
comment
Да, сделайте if @collection_page.new_record? && Spree::CollectionPage.last.present?   -  person Vasseurth    schedule 06.08.2014
comment
в этом есть смысл! Я попробую это в ближайшее время.   -  person neo    schedule 06.08.2014


Ответы (1)


Вы использовали оператор or. || это или, а && это и. Кроме того, вы проверяете, не будет ли last.position.present? работать, если last отсутствует.

Попробуйте if @collection_page.new_record? && Spree::CollectionPage.last.present?

person Vasseurth    schedule 06.08.2014