【发布时间】:2013-01-07 21:47:51
【问题描述】:
使用 has_one 在表单中创建单选按钮时遇到问题
型号
Class User
has_one :role
accepts_nested_attributes_for :role
Class Role
attr_accessible :name
belongs_to :user
控制器
@user = build_role
单选按钮表单
<div class="field">
<% Role.offset(1).all.each do |role_fields| %>
<%= radio_button_tag "user[role_fields_id][]", role_fields.id, @user.role_id == role_fields.id %>
<%= role_fields.name %>
<% end %>
</div>
得到错误
undefined method `role_id' for #<User id: nil, name: nil, created_at: nil, updated_at: nil>
我确定我在控制器中设置了关系,为什么这不起作用?
【问题讨论】:
-
您的
User模型是否有role_id列? -
为什么我的用户模型需要 role_id 列? @Zajn
-
我假设您为每个用户存储了一个
role_id,但 Geoff 在他的回答中所说的内容是有道理的。看到@user.role_id让我觉得您正在尝试访问该用户实例上的role_id属性,因为根据您的错误,用户实例没有role_id方法。 -
@Zajn,我应该将它包含在我的答案中,但是文档中有一节关于
has_one与belongs_to明确表示不会有role_id这个方向。 (在回答之前,我必须自己查一下以确认。) -
@Geoff,对,我只是不确定他是否偶然混淆了他的联想并使用了
has_one,他的意思是belongs_to。我知道我总是把它们弄混。
标签: ruby-on-rails-3 controller radio-button has-one