这可能是一个简单的问题。我试图通过表单选择更新用户实例的性别,但遇到了问题。以下是相关模型:
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
这是我模板的相关部分:
edit.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>
当我提交表单时,我收到的错误是&#34;未定义的方法`id&#39; for&#34; 2&#34;:String&#34;然后查看更多与错误相关的消息(参见附图)。有谁知道如何解决这个问题?
答案 0 :(得分:1)
尝试更改您宣布枚举的方式(可能直接属于用户,除非您希望他们有多个性别,您随时间跟踪?)。请尝试以下方法:
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