Ruby on Rails:未定义nil的'any?'方法:NilClass

ddarikpa  于 2022-11-22  发布在  Ruby
关注(0)|答案(3)|浏览(175)

我有一个照片分享网页应用程序,我试图在照片中添加评论。我找不到任何错误。可能是index函数中的控制器类有问题。当我试图在照片下方显示评论时,出现了未定义的方法错误。HAML代码中的错误。
错误:- if @photo_comments.任何?
控制器:

class CommentsController < ApplicationController

  def index
    @photo_comments = Comment.where(photo_id: => photo_id)
  end

  def create
    @comment = Comment.create(user_id: params[:user_id], photo_id: params[:photo_id], text: params[:comment][:text])
    flash[:notice] = "Successfully added a comment"
    redirect_to :back
  end

  private
    def comment_params
      params.require(:comment).permit(:user_id, :photo_id, :text)
    end

end

产品型号:

class Comment < ActiveRecord::Base
    belongs_to :user
    belongs_to :photo
end

数据库:

class CreateComments < ActiveRecord::Migration
  def change
    create_table :comments do |t|
      t.integer :user_id
      t.integer :photo_id
      t.string :text
      t.timestamps
    end
  end
end

查看方式:

%p Comments
- if @photo_comments.any?
  - @photo_comments.each do |comment|
    .bold-text= "#{comment.user.email}: "
    .normal-text= comment.text
    %br
- else
  .text No comments for this photo yet! 
%br
%br
%p
  = form_for Comment.new(), :url => user_photo_comments_path do |form|
    = form.label :text, 'Add a Comment'
    %br
    = form.text_area :text
    %br
    = form.submit 'Post'

路线:

Rails.application.routes.draw do
  get '/' => 'home#index'
  resources :users do
    resources :photos do
      resources :comments
    end
    resources :follows
  end

  resources :tags, only: [:create, :destroy]
  get '/log-in' => "sessions#new"
  post '/log-in' => "sessions#create"
  get '/log-out' => "sessions#destroy", as: :log_out

end
hof1towb

hof1towb1#

这两行字毫无意义:

- if @photo_comments.nil?
  - @photo_comments.each do |comment|

如果示例变量@photo_commentsnil,那么迭代它吗?当然,在这种情况下,你会得到一个undefined method 'each' for nil:NilClass
我猜你的意思是这样的:

- unless @photo_comments.nil?
  - @photo_comments.each do |comment|
yrdbyhpb

yrdbyhpb2#

这句台词似乎有点问题:

@photo_comments = Comment.where(photo_id: => photo_id)

我可以在这里发现一些潜在的错误:

  • 散列语法:如果要混合使用这两种样式,则应使用photo_id: photo_id或(Ruby 1.9之前的版本):photo_id => photo_id
  • 方法或变量photo_id似乎未在控制器中定义,您可能是指params[:photo_id]
rdrgkggo

rdrgkggo3#

这一行肯定有语法错误:

@photo_comments = Comment.where(photo_id: => photo_id)

此外,photo_id没有在控制器中的任何地方定义,因此可能它应该看起来像:

@photo_comments = Comment.where(photo_id: params[:photo_id])


undefined_method错误通常发生在对nil值调用一个方法时。在您的例子中,示例变量@photo_comments为nil,因此在视图中产生undefined_method错误。

相关问题