2014-12-16 3 views
0

Это, вероятно, простая проблема. Я пытаюсь обновить пол пользовательского экземпляра с помощью выбора формы, но я сталкиваюсь с проблемами. Вот соответствующие модели:undefined method `id 'for" 2 ": String

user.rb

class User < ActiveRecord::Base 

    . . . 

    has_one :user_sex 
    has_one :sex, :through => :user_sex 

    accepts_nested_attributes_for :user_sex 
end 

sex.rb

class Sex < ActiveRecord::Base 
    enum options: [:"Not Known", :"Male", :"Female", :"Not Applicable"] 
    has_one :user_sex 
    has_one :user, :through => :user_sex 
end 

user_sex.rb

class UserSex < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :sex 
end 

Это соответствующая часть моего шаблона:

edi t.html.erb

. . . 

<div class="form-group"> 
    <%= f.label :sex %><br /> 
    <%= f.select :sex, Sex.options, :class => "form-control" %> 
    <%= showErrorMessages("Sex", :sex) %> 
</div> 

. . . 

Вот HTML выход из моего выбора кода:

<select id="user_sex" name="user[sex]"> 
    <option value="0">Not Known</option> 
    <option value="1">Male</option> 
    <option value="2">Female</option> 
    <option value="3">Not Applicable</option> 
</select> 

Когда я отправить форму, я получаю сообщение об ошибке, что читает «неопределенный метод` идентификатор»для„2“ : String ", а затем просмотреть больше сообщений об ошибках (см. Прикрепленное изображение). Кто-нибудь знает, как я могу это исправить? enter image description here

ответ

1

Попробуйте изменить способ декларирования вашего enum (возможно, он принадлежит непосредственно пользователю, если вы не хотите, чтобы у вас было несколько полов, которые вы отслеживаете с течением времени?). Попробуйте следующее:

class User < ActiveRecord::Base 
    enum sex: { unknown: 0, male: 1, female: 2, n_a: 3 } 
end 

Затем просто установите значение по умолчанию 0 в вашей БД и назначьте как ожидалось.

Если вы хотите добавить секс к нескольким классам, я предлагаю использовать ActiveSupport::Concern, как это:

#app/models/concerns/sex.rb 
module Sex 
    extend ActiveSupport::Concern 

    included do 
    enum sex: { unknown: 0, male: 1, female: 2, n_a: 3 } 
    end 
end 

# app/models/user.rb 
class User < ActiveRecord::Base 
    include Sex 
end 
+0

Ваше решение имеет смысл. Думаешь, я могу переусердствовать? Я должен упомянуть, что я делаю секс своей таблицей, потому что другие сущности в моем приложении могут иметь секс. Мне представляется разумным хранить возможные значения для пола в базе данных. –

+0

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

+0

Я пока не понимаю, как получить доступ к перечислению, которое я определил в своей озабоченности из представления. Я тоже не видел примеров кода, описывающих это. Я бы подумал, что в моем случае это будет выглядеть как <% = User.sex%>, но это не работает. –

Смежные вопросы