Проверка наличия рельсов на нуле - PullRequest
0 голосов
/ 19 ноября 2010

Я хочу убедиться, что атрибут существует, но кажется, что он все еще проскальзывает, и я не уверен, как лучше его проверить.

Это должно работать, но не работает. Это attr_accessor, а не настоящий атрибут, если это имеет значение.

validates_presence_of :confirmed, :rooms

{"commit"=>"Make Booking",
 "place_id"=>"the-kosmonaut",
 "authenticity_token"=>"Tkd9bfGqYFfYUv0n/Kqp6psXHjLU7CmX+D4UnCWMiMk=",
 "utf8"=>"✓",
 "booking"=>{"place_id"=>"6933",
 "bookdate"=>"2010-11-22",
 "rooms"=>[{}],
 "no_days"=>"2"}}

Не уверен, почему мой form_for возвращает пустой массив в массиве ...

<% form_for :booking, :url => place_bookings_path(@place) do |f| %>
<%= f.hidden_field :bookdate, { :value => user_cart.getDate } %>
<%= f.hidden_field :no_days, { :value => user_cart.getDays } %>

<% for room in pricing_table(@place.rooms,@valid_dates) %>

  <%= select_tag("booking[rooms][][#{room.id}]", available_beds(room)) %>

<% end %>
<% end %>

Ответы [ 4 ]

2 голосов
/ 19 ноября 2010

Переопределите validate метод и напишите туда свою пользовательскую проверку.Что-то вроде

def validate
  if rooms.blank? || rooms.first.blank? # first because it seems to be an array that holds only one Hash.
    errors.add_to_base "Rooms can't be blank."
  end
end

Кстати, почему rooms структурирован как массив, который содержит один хеш?Для более разумного решения вы можете объяснить это.

1 голос
/ 21 ноября 2012

Опираясь на ответ Чирантана, разве номера не являются дочерними для бронирования?Так не должно быть:

def validate
  if booking[:rooms].blank? || booking[:rooms].first.blank? 
    errors.add_to_base "Rooms can't be blank."
  end
end
0 голосов
/ 19 ноября 2010

Попробуйте удалить измерение из вашего массива:

<%= select_tag("booking[rooms][#{room.id}]", available_beds(room)) %>

вместо

<%= select_tag("booking[rooms][][#{room.id}]", available_beds(room)) %>
0 голосов
/ 19 ноября 2010

validates_presence_of проверяет, является ли поле пустым.Проверка не удалась бы, если бы ваш массив комнат был пуст (установлен на []), но так как ваш массив содержит хэш, он не пустой, поэтому проверка не прошла.

Чтобы продемонстрировать, попробуйте это из консоли:

a = []
a.empty?

Это вернет true.

a = [{}]
a.empty?

Возвращает false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...