各ユーザーが自分のアカウントへのアクセスを許可されている 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