Сравнивая длину строки с числом.Ruby on Rails 5 - PullRequest
0 голосов
/ 26 января 2019

Мне нужно сравнить длину строки с количеством введенных мест и выдать ошибку, если длина больше. Я использую ассоциацию has_and_belongs_to_many.

У меня есть таблица рейсов и таблица пассажиров, они соединены вместе таблицей flight_passengers для добавления пассажиров в новый рейс.

У меня проблемы с правильным способом вызова строки пассажиров и сравнения ее длины с количеством введенных мест.

Число мест - целое число.

class Flight < ApplicationRecord
 validate :num_passengers

 def num_passengers
  if passenger.passenger_id.length > seats
   errors.add(:seats, "must be more than passengers")
  end
 end

end

form.html.erb (как пассажиры добавляются в новый рейс)

<label><%= form.label :passengers %></label>
    <%= collection_select(:passenger, :passenger_id, Passenger.all, :id, :first_name, {}, { :multiple => true } )%>

schema.rb

create_table "flights", force: :cascade do |t|
 t.string "origin"
 t.string "destination"
 t.string "dep_time"
 t.string "arr_time"
 t.integer "seats"
 t.integer "price"
 t.datetime "created_at", null: false
 t.datetime "updated_at", null: false
 t.integer "airline_id"
 t.index ["airline_id"], name: "index_flights_on_airline_id"
end

create_table "flights_passengers", id: false, force: :cascade do |t|
 t.integer "flight_id", null: false
 t.integer "passenger_id", null: false
 t.index ["flight_id", "passenger_id"], name: "index_flights_passengers_on_flight_id_and_passenger_id"
 t.index ["passenger_id", "flight_id"], name: "index_flights_passengers_on_passenger_id_and_flight_id"
end 

create_table "passengers", force: :cascade do |t|
 t.string "first_name"
 t.string "last_name"
 t.datetime "created_at", null: false
 t.datetime "updated_at", null: false
end

1 Ответ

0 голосов
/ 26 января 2019

Это все о типе данных. Невозможно узнать длину цифры, необходимо преобразовать значение в строку с помощью to_s:

def num_passengers
  if passenger.passenger_id.to_s.length > seats
   errors.add(:seats, "must be more than passengers")
  end
end
...