0

基本的に、Devise を使用したアプリがあり、ユーザー モデルとアジェンダ モデルがあります。アジェンダ「belongs_to」ユーザーとユーザー「has_many」アジェンダ、これらは私のデータベース関係です。IRB を起動してデータベース データを正しく取得できます user = User.first user.agendas と、そのユーザーに属するすべての投稿のリストを取得しますサインイン時に問題が発生し、ユーザーは home#index にリダイレクトされますが、Home#index で NoMethodError が発生します nil:NilClass の undefined method `agendas' です 何か不足していると確信しています.私のアジェンダコントローラーも? ..app/views/home/index.html.erb

<h3>Home</h3>
<div class="row">
    <div class="span8">
        <% if @user.agendas.any? %>
        <h3>Agendas</h3>
        <ol class="agendas">
            <%= render @agendas %>
        </ol>
        <% end %>
    </div>
</div>

私のhome_controller.rb

class HomeController < ApplicationController
  before_filter :authenticate_user!

  def index
    @agendas = current_user.agendas.paginate(page: params[:page])
  end

私のアジェンダ コントローラには、将来のコード用に作成と破棄のスタブしかありません。そのモデル /agenda.rb

class Agenda < ActiveRecord::Base
  attr_accessible :title
  belongs_to :user

  validates :title, presence: true, length: { maximum: 140 }
  validates :user_id, presence: true

  default_scope order: 'agendas.created_at DESC'
end
4

1 に答える 1

0

あなたのエラーはこれから来ています:

<% if @user.agendas.any? %>

そして、エラーはそれ@usernil. あなたのコントローラーは言う:

def index
  @agendas = ...
end

@userそこに値が割り当てられていることはわかりません。authenticate_user!あなたのフィルターも設定されていないと思います@user。だからあなたはこれを行うことができます:

def index
  @user    = current_user
  @agendas = @user.agendas.paginate(page: params[:page])
end

その後:

<% if @user.agendas.any? %>
  <h3>Agendas</h3>
  <ol class="agendas">
    <%= render @agendas %>
  </ol>
<% end %>

current_userERB で直接アクセスすることもできます。

<% if current_user.agendas.any? %>
  <h3>Agendas</h3>
  <ol class="agendas">
    <%= render @agendas %>
  </ol>
<% end %>

しかし、あなたはすでにコンピューティングの苦労をしているということを心に留めておいてください。それを@agendas見て、コントローラーを放っておいてはいかがでしょうか?

<% if @agendas.present? %>
  <h3>Agendas</h3>
  <ol class="agendas">
    <%= render @agendas %>
  </ol>
<% end %>
于 2012-05-03T17:35:12.567 に答える