Как заставить базу данных читать значение формы, а не номер опции

Для полей моего профиля, таких как Этническая принадлежность. Пользователь 1 выбрал «азиат» в качестве своей этнической принадлежности. В базе данных пользователей будут отображаться номера для выбранной этнической принадлежности (например, азиаты = 1, голландцы = 2 и т. д. в зависимости от порядка этнических групп в списке параметров), а база данных поиска распознает только саму этническую принадлежность... а не число за этническую принадлежность. Таким образом, поиск пытается найти пользователей с выбранным азиатским происхождением, но технически их нет, поскольку база данных пользователей использует номер, а не название этнической принадлежности.

Я считаю, что моя база данных пользователей показывает числа, потому что это то, что используется в форме с драгоценным камнем best_in_place.

показать.html:

 <p>Ethnicity: <%= best_in_place @user, :ethnicity, nil: 'What is your ethnicity?', :type => :select, :collection => [[1, "Asian"], [2, "Biracial"], [3, "Indian"], [4, "Hispanic/Latin"], [5, "Middle Eastern"], [6, "Native American"], [7, "Pacific Islander"], [8, "White"], [9, "Other"]] %></p>

Я пробовал делать:

collection: ["Asian", "Biracial", "Indian"]

а также

collection: [ ["Asian", "Asian"], ["Biracial", "Biracial"], ["Indian", "Indian"]]

Если я сделаю первый пример, опция, которая должна читаться как «азиат», вместо этого будет читать «s».

Во втором примере не отображаются никакие параметры, поэтому это просто пустой раскрывающийся список.

Кто-нибудь знает, как я могу сохранить эти параметры в базе данных пользователя в качестве фактического параметра, а не чисел?

схема:

 create_table "searches", :force => true do |t|
    t.string   "gender"
    t.string   "age"
    t.string   "zip_code"
    t.string   "children"
    t.string   "religion"
    t.string   "ethnicity"
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
  end

  create_table "users", :force => true do |t|
    t.string   "email"
    t.string   "password_digest"
    t.string   "zip_code"
    t.string   "birthday"
    t.string   "name"
    t.string   "username"
    t.string   "gender"
    t.string   "ethnicity"
    t.string   "sexuality"
    t.string   "career"
    t.string   "education"
    t.string   "religion"
    t.string   "politics"
    t.string   "children"
    t.string   "height"
    t.string   "user_smoke"
    t.string   "user_drink"
    t.string   "about_me"
    t.string   "inches"
    t.string   "feet"
    t.datetime "created_at",             :null => false
    t.datetime "updated_at",             :null => false
    t.string   "auth_token"
    t.string   "password_reset_token"
    t.datetime "password_reset_sent_at"
    t.boolean  "admin"
    t.string   "role"
    t.integer  "roles_mask"
    t.string   "age"
    t.string   "age_end"
  end

person pwz2000    schedule 09.05.2013    source источник
comment
Как вы храните этническую принадлежность в базе данных? Какой тип столбца? Можете ли вы опубликовать соответствующие части вашего db/schema.rb?   -  person Ola Tuvesson    schedule 09.05.2013
comment
Я добавил схему. Все они являются строками и сохраняются как имя. Он берет числа из моей формы на show.html. Но я должен использовать этот лучший драгоценный камень.   -  person pwz2000    schedule 09.05.2013


Ответы (1)


Я понял проблему. Лучший на месте код был в порядке, мне просто нужно было изменить форму поиска.

<%= f.select :ethnicity, [["Asian", "1"], ["Biracial", "2"], ["Indian", "3"], ["Hispanic/Latin", "4"], ["Middle Eastern", "5"], ["Native American", "6"], ["Pacific Islander", "7"], ["White", "8"], ["Other", "9"]], :include_blank => true %>

Как видите, я добавил значение, которое отображается в моей базе данных после названия этнической принадлежности. Это теперь отлично тянет поиски.

person pwz2000    schedule 10.05.2013