我有电影数据库(TMDb)的API。我想让应用程序单独审核。我创造了所有的东西,但这个错误使得被吸引?我怎么能摆脱这个?
我的错误是:
NoMethodError in ReviewsController#create undefined method `comments' for #<Review:0x00000005278fa8> Did you mean? comment comment? comment=
@review = current_user.reviews.new(review_params.merge(movie_id: @movie.id))
if @review.save # I got error here!!!
flash[:success] = "Review saved!"
redirect_to root_path
else
flash[:alert] = "Woops! It seems there was an error."
redirect_to root_path
end
回顾Params
def review_params
params.require(:review).permit(:comment)
end
我的movie.rb
是:
class Movie < ApplicationRecord
validates :title, :release_date, :released, :runtime, :popularity, :language, :budget, :average_vote, :vote_count, :tmdb_id, presence: true
has_many :reviews
end
我的review.rb
是:
class Review < ApplicationRecord
belongs_to :user
belongs_to :movie
validates :user, :movie, :comments, presence: true
end
我的user.rb
是:
class User < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
validates :username, presence: true
validates_uniqueness_of :username
mount_uploader :avatar, AvatarUploader
has_many :reviews
end
答案 0 :(得分:1)
您的错误消息显示:
#<Review:0x00000005278fa8>
的未定义方法'评论'。你的意思是?评论评论?注释=
此语法#<Review:0x00000005278fa8>
引用Review类的实例。
查看此代码:
class Review
def show
puts "I'm a review"
end
end
review = Review.new
puts review
review.show
review.comments
--output:--
#<Review:0x007fa4db0a5bb8>
I'm a review
1.rb:10:in `<main>': undefined method `comments' for #<Review:0x007fa4db0a5bb8> (NoMethodError)
这个错误看起来很熟悉吗?该错误表示在Review类中没有定义名为comments()的方法。
您的错误甚至会问你
你的意思是?评论评论?注释=
即。您的方法名称实际拼写为“评论”,“评论?”或“评论=”?
此处发生错误的原因是:
if @review.save # I got error here!!!
是因为该行代码会导致您在Review类中指定的验证执行:
创建并保存新记录将向其发送SQL INSERT操作 数据库。更新现有记录将发送SQL UPDATE 操作而不是。验证通常在这些命令之前运行 被发送到数据库。如果任何验证失败,则对象将是 标记为无效,Active Record将不执行INSERT或 更新操作。这样可以避免在中存储无效对象 数据库。您可以选择在运行时运行特定验证 对象已创建,保存或更新。
http://guides.rubyonrails.org/active_record_validations.html
以下是rails指南中的一个示例:
class Person < ApplicationRecord validates :name, presence: true end Person.create(name: "John Doe").valid? # => true Person.create(name: nil).valid? # => false
正如您所看到的,我们的验证让我们知道我们的人不是 有效且没有名称属性。
答案 1 :(得分:1)
错误看起来像是Review
模型上的验证。这条线
validates :user, :movie, :comments, presence: true
在尝试将记录实际保存到数据库之前,实际上会调用@review.comments.present?
。但是,错误告诉您@review.comments
存在问题 - #comments
对象上不存在@review
方法。
你所显示的错误也试图给你一个提示,它在哪里读取&#34;你的意思是评论,评论?,评论=&#34;,表明有一个类似名称的方法(单数comment
)也许你有一个错字。您可能只需要将app/models/review.rb
中的验证调整为
validates :user, :movie, :comment, presence: true
答案 2 :(得分:0)
根据错误消息判断该字段为comment
而不是comments