У меня есть таблица User
Rails 4. Страна и Регион/Область проверки в модели
create_table :users do |t|
t.string :first_name
t.string :last_name
t.string :country
t.string :region
t.string :city
t.timestamps
end
Мне нужно проверить страну и регион, а также проверить делает регион относится к стране. Я использую драгоценный камень countries для проверки страны.
# user.rb
class User < ActiveRecord::Base
validates_inclusion_of :country, in:Country.all.map(&:pop), :message => "wrong country format"
end
Как я могу использовать проверку для 'области' и проверка делает регион относится к стране
UPDATE
Используя советы @ engineersmnky в
# пользователь.rb
validates :country, :region, presence: true
validate :location
def location
current_country = Country[country]
if current_country
errors.add(:region, "incorrect state for country #{current_country.name}.") unless current_country.map{ |k,v| v["name"]}.include?(region)
else
errors.add(:country, "must be a 2 character country representation (ISO 3166-1).")
end
end
Test это в консоли:
2.1.2 :001 > u = User.new(country:"US", region:"SomeState")
=> #<User id: nil, first_name: nil, last_name: nil, country: "US", region: "SomeRegion", city: nil, address: nil, zip: nil, phone: nil, company: nil, created_at: nil, updated_at: nil>
2.1.2 :002 > u.valid?
NoMethodError: undefined method `map' for #<Country:0x007fefb16dd140>
Где ошибка? или я понимаю, что-то неправильно :(
это должно быть 'current_country.states.map {| k, v | v ["name"]}. include? (region) 'вам не хватает' состояний' 'Hash' – engineersmnky