Я пытаюсь сделать приложение в Rails 4. Я использую простую форму для форм и country_select gem для списков стран.Rails 4 - Country Select & Simple Form
У меня есть модель адреса, которая включает в себя этот метод:
def country_name
self.country = ISO3166::Country[country]
country.translations[I18n.locale.to_s] || country.name
end
При попытке сохранить новый адрес, я получаю эту ошибку:
undefined method `translations' for "Australia":String
Может кто-нибудь увидеть, что случилось с этим определение метода?
Если я изменю свою точку зрения на:
<% if @profile.addresses.any? %>
<%= @profile.addresses.first.country.titlecase %>
<% else %>
<span class="profileeditlink">
<%= link_to "Add your location", new_address_path %>
</span>
<% end %>
Тогда запись дисплеев - но вместо того, чтобы АС Австралии (который является то, что метод в модели адреса обеспечивает).
Адрес таблице:
create_table "addresses", force: :cascade do |t|
t.string "unit"
t.string "building"
t.string "street_number"
t.string "street"
t.string "city"
t.string "region"
t.string "zip"
t.string "country"
t.boolean "main_address"
t.boolean "project_offsite"
t.string "time_zone"
t.float "latitude"
t.float "longitude"
t.integer "addressable_id"
t.integer "addressable_type"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
add_index "addresses", ["addressable_type", "addressable_id"], name: "index_addresses_on_addressable_type_and_addressable_id", unique: true, using: :btree
ПРИНИМАТЬ JAEHYEN'S внушения,
Я изменил мой метод название страны в модели адреса в:
def country_name
# self.country = ISO3166::Country(country)
# country.translations[I18n.locale.to_s] || country.name
iso_country = ISO3166::Country.find_by_name[country] # `country` should be name like 'Australia'
iso_country.translations[I18n.locale.to_s] || iso_country.name
end
Я получаю эту ошибку:
undefined method `translations' for nil:NilClass
ДРУГАЯ ПОПЫТКА:
Я нашел этот ресурс: http://www.scriptscoop.net/t/4ee6d5ef4577/displaying-countries-using-country-select-gem-in-rails-4.html
Я попытался изменить свою форму ввода в:
<%= f.country_select :country, priority: [ "Australia", "New Zealand", "United Kingdom" ] %>
Это еще раз показывает код страны вместо названия страны. Я застрял.
ДРУГАЯ ПОПЫТКА
Я нашел этот пост: Rails Simple_Form: How to show long name of the country
Ответ на этот пост предполагает определение COUNTRY_NAME как:
def country_name
country = ISO3166::Country[country_code]
country.translations[I18n.locale.to_s] || country.name
end
Это немного отличается от моих предыдущих попыток, однако, когда Я пробую это, я получаю эту ошибку:
undefined local variable or method `country_code' for #<Address:0x007fbae5bfb290>
я попытался изменить способ:
def country_name
self.country = ISO3166::Country[country_code]
country.translations[I18n.locale.to_s] || country.name
end
Это дает ту же ошибку, что и формулировки, которые не используют «я». Я думаю, что эти попытки не работают, потому что атрибут в моей адресной таблице называется «страна».
Когда я изменить метод для:
def country_name
self.country = ISO3166::Country[country]
country.translations[I18n.locale.to_s] || country.name
end
я получаю сообщение об ошибке со словом «переводы». Когда я удалю '.перевод »из метода, я получаю сообщение об ошибке со словом« имя ».
Я теряю свой мрамор, пытаясь понять это.
ДРУГАЯ ПОПЫТКА
Я попытался добавить страны камень в мой файл гем (выше country_select).
Ничего не меняется, когда я связываю этот драгоценный камень. Та же проблема.
ДРУГАЯ ПОПЫТКА
Попытка снова (как я первоначально был метод определен), но со странами драгоценный камень установлен (выше country_select драгоценный камень):
def country_name
self.country = ISO3166::Country[country]
country.translations[I18n.locale.to_s] || country.name
end
Я получаю эту ошибку: неопределенный метод `переводов для «Каймановых островов»: String
Это та самая проблема, с которой я изначально начинался, поэтому я не думаю, что добавление драгоценных камней в странах помогло продвинуться к решению.
Является 'ISO3166 :: Country' из https://github.com/hexorx/countries? –
No - country select gem: https://github.com/stefanpenner/country_select – Mel
Правильно, но 'country_select' зависит от' стран'. –