Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails nil:NilClass的未定义方法、化身和名称_Ruby On Rails_Methods_Undefined_Null_Avatar - Fatal编程技术网

Ruby on rails nil:NilClass的未定义方法、化身和名称

Ruby on rails nil:NilClass的未定义方法、化身和名称,ruby-on-rails,methods,undefined,null,avatar,Ruby On Rails,Methods,Undefined,Null,Avatar,nil:NilClass的未定义方法avatar?' nil:NilClass的未定义方法name' 您好,我收到了以下错误在我的部分。我之所以列出这两个词,是因为在注释掉导致第一条错误消息的那行之后,我得到了第二个错误,这让我相信问题不是具体与“阿凡达”或“名字”有关,而是与其他东西有关,尽管我不知道是什么。在rails控制台中,我可以在评论中调用user和name。如果有必要的话,我还使用Faker为数据库植入种子。这是部分原因 <%= content_tag :div, class:

nil:NilClass的未定义方法
avatar?'
nil:NilClass的未定义方法
name'

您好,我收到了以下错误在我的部分。我之所以列出这两个词,是因为在注释掉导致第一条错误消息的那行之后,我得到了第二个错误,这让我相信问题不是具体与“阿凡达”或“名字”有关,而是与其他东西有关,尽管我不知道是什么。在rails控制台中,我可以在评论中调用user和name。如果有必要的话,我还使用Faker为数据库植入种子。这是部分原因

<%= content_tag :div, class: 'media', id: "comment-#{comment.id}" do %>
  <%= link_to '#', class: 'pull-left' do %>
    <%= image_tag(comment.user.avatar.small.url) if comment.user.avatar?  %>
  <% end %>
  <div class="media-body">
    <small>
      <%= comment.user.name %> commented <%= time_ago_in_words(comment.created_at) %> ago
      <% if policy(comment).destroy? %>
        | <%= link_to "Delete", [@topic, @post, comment], method: :delete %>
      <% end %>
    </small>
    <p><%= comment.body %></p>
  </div>
<% end %>
我已经重置了数据库,但是没有用。被困在什么问题上。谢谢你的帮助

有关我的用户和评论模型,请参见下文

class Comment < ActiveRecord::Base
  belongs_to :post
  belongs_to :user

  default_scope { order('created_at DESC') }

  validates :body, length: { minimum: 5 }, presence: true

  after_create :send_favorite_emails

  private

  def send_favorite_emails
    self.post.favorites.each do |favorite|
      if favorite.user_id != self.user_id && favorite.user.email_favorites?
        FavoriteMailer.new_comment(favorite.user, self.post, self).deliver
      end
    end
  end
end
class注释
用户模型

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable, :confirmable

  has_many :posts
  has_many :comments
  has_many :votes, dependent: :destroy
  has_many :favorites, dependent: :destroy
  mount_uploader :avatar, AvatarUploader

  def role?(base_role)
    role == base_role.to_s
  end

  def favorited(post)
    self.favorites.where(post_id: post.id).first
  end

  def voted(post)
    self.votes.where(post_id: post.id).first
  end

  private
end
class用户
如果您

对于
nil:NilClass

你调用方法的对象是
nil

因此,在您的情况下,您正在调用
avatar?
name
的内容为零

查看您的代码,很清楚
注释。user
是(a)调用这些方法的方法,因此(b)什么是nil


结果:您的评论没有用户。强制执行所有注释(包括新注释/空注释/存根注释)以获得用户(空白用户?),或者创建视图以使用户不再需要。

问题已被发现。在部分渲染中

comment: @comment
应该是

comment: comment

nil:NilClass
错误通常是因为您调用了一个未循环的变量,或者您正在使用的var内部有
nil
数据。您可以向我们展示您的
用户
注释
模型吗?用户未设置注释是这样说的。为什么?那是上游的某个地方。关于当前用户。comments.build(comment_params)是我要查看的地方。等等,如果在控制器中设置
@comment
,视图中如何设置
@comment
?您是否应该使用
@comment
?@RichPeck-我添加了注释和用户模型。我怀疑问题在于调用了什么方法,但正如我在上面写的,在rails控制台中,所有的评论都有一个用户id。另外,我是新手,所以我不知道还需要查找什么,我添加了评论和用户模型。我怀疑问题在于调用了什么方法,但正如我在上面写的,在rails控制台中,所有的评论都有一个用户id。另外,我是一个新手,所以我不知道还能看到什么for@user3465296在您的情况下,我会使用(gem
pry rails
)并在异常之前的视图中插入一个
class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable, :confirmable

  has_many :posts
  has_many :comments
  has_many :votes, dependent: :destroy
  has_many :favorites, dependent: :destroy
  mount_uploader :avatar, AvatarUploader

  def role?(base_role)
    role == base_role.to_s
  end

  def favorited(post)
    self.favorites.where(post_id: post.id).first
  end

  def voted(post)
    self.votes.where(post_id: post.id).first
  end

  private
end
comment: @comment
comment: comment