0

各ユーザーが自分のアカウントへのアクセスを許可されている 1 つのキーホルダーを持つアプリケーションがあります。これらは別のモデルです。モデル内で 1 対 1 の関係を設定しましたが、これをビュー内で使用しようとすると、nil:NilClass の「未定義のメソッド 'id'」というエラーが発生します。私はリレーションシップを使用し、以前に何度もそれらをトラバースしましたが、なぜこれが起こっているのか理解できません。誰か説明してもらえますか?

私が通常とは異なる唯一のことは、通常のように足場を組むのではなく、Devise を使用してキーホルダー モデルを生成することです。

ありがとう!

ユーザー.rb:

has_one :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
4

1 に答える 1

0

エラーがどこにあるかを確認するためにすべてを試しました-たとえば、キーホルダーのuser_idとユーザーのkeyholder_idの両方が整数であることなどを確認しました.

誰かがこれを読んでいて、コードでそうするようにしたい場合は、次のとおりです。

@model.column_for_attribute('column_name').type

最終的にこれを修正することはできませんでした - 幸運なことに、私はこのアプリを使い始めたばかりだったので、Devise を追加する前に両方のモデルをスキャフォールディングしてやり直しました。

于 2013-08-02T09:39:31.687 に答える