无法在Rails中遍历一对一关系

时间:2013-08-01 21:23:26

标签: relationship ruby-on-rails-4

我有一个应用程序,每个用户都有一个密钥持有者,可以访问他们的帐户。这些是单独的模型。我在模型中建立了一对一的关系,但是当我尝试在视图中使用它时,我得到nil:NilClass的'undefined method'id'的错误。我以前曾经多次使用过关系并且遍历过它们,但是我不明白为什么会这样,所以请有人解释一下吗?

我做的唯一与正常情况不同的是使用Devise来生成密钥持有者模型,而不是像往常一样使用脚手架。

谢谢!

user.rb:

has_one :keyholder     

keyholder.rb:

belongs_to :user, dependent: :destroy

这些观点都不起作用: keyholders / index.html.erb

<% @keyholders.each do |keyholder| %>
      <tr>
        <td><%= keyholder.id %></td>
        <td><%= keyholder.username %></td>
        <td><%= keyholder.user.id %></td>
        <td><%= link_to 'Show', keyholder %></td>
        <td><%= link_to 'Edit', edit_keyholder_path(keyholder) %></td>
        <td><%= link_to 'Destroy', keyholder, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
<% end %>

或keyholder / show.html.erb

<p>
  <strong>ID:</strong>
  <%= @keyholder.id %>
</p>

<p>
  <strong>Username:</strong>
  <%= @keyholder.username %>
</p>

<p>
  <strong>Keyholder for:</strong>
  <%= @keyholder.user.first_name %> <%= @keyholder.user.last_name %>
</p>

<p>
  <strong>User ID:</strong>
  <%= @keyholder.user.id %>
</p>

控制器代码:

  def index
    @keyholders = Keyholder.all
  end

  def show
    @keyholder = Keyholder.find(params[:id])
  end

1 个答案:

答案 0 :(得分:0)

我尝试了一切来检查错误的位置 - 例如检查keyholder的user_id和用户的keyholder_id都是整数等。

如果有人正在阅读此内容并希望代码这样做,那就是:

@model.column_for_attribute('column_name').type

我最终无法解决这个问题 - 幸运的是我刚开始使用这个应用程序,所以再次启动并在添加Devise之前将两个模型搭建到,它现在可以正常工作了完成了其他一切。