【问题标题】:rails 3 has_one radio buttonrails 3 has_one 单选按钮
【发布时间】: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_onebelongs_to 明确表示不会有 role_id这个方向。 (在回答之前,我必须自己查一下以确认。)
  • @Geoff,对,我只是不确定他是否偶然混淆了他的联想并使用了has_one,他的意思是belongs_to。我知道我总是把它们弄混。

标签: ruby-on-rails-3 controller radio-button has-one


【解决方案1】:

我认为这行:

<%= radio_button_tag "user[role_fields_id][]", role_fields.id, @user.role_id == role_fields.id %>

应该更正如下:

<%= radio_button_tag "user[role_fields_id][]", role_fields.id, @user.role.id == role_fields.id %>

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    相关资源
    最近更新 更多