2

当用户登录时,我试图在首页上放置所有待办事项的提要。但是,@feed_items 没有返回任何内容,即使提要正在工作。这是错误:

未定义的方法“任何?” 对于零:NilClass

这是提取的来源:

1: <% if @feed_items.any? %>
2:  <ol class="todos">
3:      <%= render partial: 'shared/feed_item', collection: @feed_items %>
4:  </ol>

这是我的静态页面控制器:

class StaticPagesController < ApplicationController

def home
    if signed_in?
        @todo = current_user.todos.build
        @feed_items = current_user.feed.paginate(page: params[:page])
    end
end
end

这是我的 User.rb

class User < ActiveRecord::Base
attr_accessible :email, :username, :password, :password_confirmation
has_secure_password

before_save { |user| user.email = email.downcase }
before_save :create_remember_token

has_many :todos, :dependent => :destroy

validates :username, :presence => true, length: { maximum: 50 }
validates :password, :presence => true, length: { minimum: 6 }
validates :password_confirmation, presence: true
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, :presence => true, 
        format: { with: VALID_EMAIL_REGEX },
        uniqueness: { case_sensitive: false }

def feed
  # This is preliminary. See "Following users" for the full implementation.
  Todo.where("user_id = ?", id)
end

private

def create_remember_token
  self.remember_token = SecureRandom.urlsafe_base64
end
end

这是我的主页(index.html.erb)

% if signed_in? %>
<div class="row">
    <aside class="span4">
        <section>
            <%= render 'shared/user_info' %>
        </section>
    </aside>
    <div class="span8">
        <h3>Todo Feed</h3>
        <%= render 'shared/feed' %>
    </div>
</div>
<% else %>
<div class="center hero-unit">
    <h1>Welcome to the To Do app!</h1>

    <p>This app allows people to create a to do list for themselves on the web  browser! HELLLZZZ YEEAAAHHH!!!</p>

    <%= link_to "Sign Up Here!", signup_path, class: "btn btn-large btn-primary" %>
    <%= link_to "Find your Friends (and other Users) Here!", users_path, class: "btn btn-large btn-primary" %>

非常感谢您!

4

4 回答 4

7

Nil不提供方法any?。快速破解将是使用以下try方法:

<% if @feed_items.try(:any?) %>
于 2013-06-17T20:18:30.747 回答
3

@feed_items为 nil,而您正试图调用any?它。Nil没有那个方法。

您的控制器是“家”,但您的视图是“索引”。可能是您的控制器操作未运行,@feed_items因此未填充。尝试重命名homeindex看看是否可以解决它。

于 2013-06-17T20:13:29.090 回答
1

请参阅 Hartl Rails 教程中的清单 11.48。您需要在 'todos' 控制器中的 'create' 方法中添加以下代码行:@feed_items = []。在添加此行之前,我遇到了同样的问题。现在一切正常。

于 2014-11-19T19:26:17.780 回答
1

确保@feed_items = []在创建操作中呈现“static_pages/home”之前存在 MicropostsController。

于 2013-06-24T12:24:19.793 回答