Ruby on rails jQuery/Ajax新手我如何添加用户关系来创建新评论?
我一直在尝试使用jQuery,并一直在关注一个关于添加Ajax add review表单的问题,该表单工作得很好,但现在我想在其中添加一个功能,即评论既属于某个用户,也属于某个场所 审查控制员 views\reviews\create.js.erb 但它不会提交,没有错误 我认为我已经正确地设置了模型,并且有很多,我认为这是一个控制器问题,如果需要,我将添加其他代码位 开发日志 谢谢你的帮助 呼叫创建!(带感叹号)将引发异常,从而在保存失败时中止创建操作。检查日志/development.log以了解这些异常 使用build而不是create,这样会丢失感叹号Ruby on rails jQuery/Ajax新手我如何添加用户关系来创建新评论?,ruby-on-rails,activerecord,jquery,Ruby On Rails,Activerecord,Jquery,我一直在尝试使用jQuery,并一直在关注一个关于添加Ajax add review表单的问题,该表单工作得很好,但现在我想在其中添加一个功能,即评论既属于某个用户,也属于某个场所 审查控制员 views\reviews\create.js.erb 但它不会提交,没有错误 我认为我已经正确地设置了模型,并且有很多,我认为这是一个控制器问题,如果需要,我将添加其他代码位 开发日志 谢谢你的帮助 呼叫创建!(带感叹号)将引发异常,从而在保存失败时中止创建操作。检查日志/development.log
def create
@review = @current_user.reviews.build(params[:review])
@review.venue = @venue
if @review.save
flash[:notice] = 'Thank you for reviewing this venue!'
respond_to do |format|
format.html { redirect_to venue_path(@venue) }
format.js
end
else
render :action => :new
end
end
您的错误似乎存在于
@current\u user
中。根据您的开发日志,当您调用@current\u user时,@current\u user
为nil
。查看它。我想说的是,找出这个@current\u user
实例变量的设置位置,并找出为什么它是nil
。现在,您使用的是哪种身份验证?大多数身份验证插件,尤其是您提到的Railscasts的Ryan Bates使用的那些,使用局部变量,比如justcurrent_user
,作为访问当前登录用户的手段。我知道我所有的代码都是这样的
因此,将这行改写为
@review = current_user.reviews.create!(params[:review])
看看这是否有效。如果没有,请将其更改回原来的位置,然后跟踪此@current\u user
的设置位置。很有可能它是在控制器开头的一个中设置的,在\u filter:method\u name
之前 首先,@venue set在哪里?它不会改变结果,我已经在我的问题中添加了开发日志输出。奇怪的是,Ryan Bates在他的Railscast中使用了“create!”。谢谢你的回答,我会在完成工作后查看,我的身份验证来自另一个railscast,不记得是哪个,但它没有任何插件。我已经尝试过了,它很有效,非常感谢,非常棒的答案!
def create
@review = @current_user.reviews.create!(params[:review])
@review.venue = @venue
if @review.save
flash[:notice] = 'Thank you for reviewing this venue!'
respond_to do |format|
format.html { redirect_to venue_path(@venue) }
format.js
end
else
render :action => :new
end
end
NoMethodError (undefined method `reviews' for nil:NilClass):
app/controllers/reviews_controller.rb:14:in `create'
def create
@review = @current_user.reviews.build(params[:review])
@review.venue = @venue
if @review.save
flash[:notice] = 'Thank you for reviewing this venue!'
respond_to do |format|
format.html { redirect_to venue_path(@venue) }
format.js
end
else
render :action => :new
end
end
@review = current_user.reviews.create!(params[:review])