Ruby on Rails: как хранить данные формы - PullRequest
1 голос
/ 08 марта 2009

У меня есть поле состояния, в котором хранится значение в виде 2 символов. Например, Алабама сохраняется как AL, Аляска сохраняется как AK, Аризона сохраняется как AZ и т. Д. В show.html.erb, как отобразить длинное имя для штата, такого как Алабама, вместо того, чтобы просто показывать AL? Возможно ли это или я должен просто сохранить длинное имя в базе данных, такой как Алабама, Аляска, Аризона и т. Д.?

Ответы [ 4 ]

5 голосов
/ 08 марта 2009

Напишите метод, который выведет длинное имя состояния, и вызовите его в show.html.erb

some_model.rb:

SomeModel < ActiveRecord::Base
  STATE_CODES = {
    "AL": "Alabama", "AK": "Alaska",
    # add remaining 50
  }
  def state_human_name
    STATE_CODES[self.state]
  end

show.html.erb

<%= record.state_human_name %>

РЕДАКТИРОВАТЬ: Это не помогает хранить полные имена состояний в вашей базе данных - вам понадобятся короткие формы, по крайней мере, где-то, и поэтому в любом случае потребуется добавить отображение между короткими и длинными формами.

1 голос
/ 16 марта 2009

Я положил это в комментарии, но я решил, что это достаточно отличается, что оправдывает ответ.

Когда вы решаете, где сохранить карту своего штата, подумайте, нужно ли вам когда-нибудь отправлять вещи в Канаду или дальше. Если это так, то стоит создать таблицу состояний, связанную с таблицей стран.

И в любом случае, если ваши данные редко изменяются, то их легче помещать в базу данных, поскольку код меняется гораздо чаще. Более частые изменения = больше возможностей испортить это. Кроме того, сортировать по своему усмотрению тривиально.

class State < ActiveRecord::Base
  def self.get_states
    @@states || State.find(:all, 
                           :include => :country, 
                           :order => 'countries.name, long_name')
  end
end
1 голос
/ 08 марта 2009

Есть ли причина для использования двухбуквенных кодов (например, устаревшая база данных)? Если нет, я бы придерживался обычной идиомы ActiveRecord и имел бы отдельную таблицу «состояний», связанную по id. Если вам нужен двухбуквенный код для отображения, печати адресных меток или чего-то еще, добавьте атрибут «state_code» в таблицу состояний, но не используйте его в качестве первичного ключа.

0 голосов
/ 16 марта 2009

Tilendor, я замечаю, что если я использую STATE_CODES.invert, то выпадающий список меню выйдет из строя. Например, первые пять строк моего списка параметров показаны ниже:

Нью-Гэмпшир Огайо Колорадо Миннесота Алабама ...

В моем хэше STATES_CODES перечислено следующее в следующем порядке:

"AL" => "Алабама", "AK" => "Аляска", "AZ" => "Аризона", "AR" => "Арканзас", "CA" => "Калифорния", ...

Есть ли способ, чтобы параметры, перечисленные в форме, были в том же порядке, что и STATES_CODES? Может быть, отсортировать их по алфавиту?

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