我有一个照片分享网页应用程序,我试图在照片中添加评论。我找不到任何错误。可能是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
3条答案
按热度按时间hof1towb1#
这两行字毫无意义:
如果示例变量
@photo_comments
是nil
,那么迭代它吗?当然,在这种情况下,你会得到一个undefined method 'each' for nil:NilClass
。我猜你的意思是这样的:
yrdbyhpb2#
这句台词似乎有点问题:
我可以在这里发现一些潜在的错误:
photo_id: photo_id
或(Ruby 1.9之前的版本):photo_id => photo_id
photo_id
似乎未在控制器中定义,您可能是指params[:photo_id]
?rdrgkggo3#
这一行肯定有语法错误:
此外,
photo_id
没有在控制器中的任何地方定义,因此可能它应该看起来像:?
undefined_method
错误通常发生在对nil
值调用一个方法时。在您的例子中,示例变量@photo_comments
为nil,因此在视图中产生undefined_method错误。