Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.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 jQuery/Ajax新手我如何添加用户关系来创建新评论?_Ruby On Rails_Activerecord_Jquery - Fatal编程技术网

Ruby on rails jQuery/Ajax新手我如何添加用户关系来创建新评论?

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

我一直在尝试使用jQuery,并一直在关注一个关于添加Ajax add review表单的问题,该表单工作得很好,但现在我想在其中添加一个功能,即评论既属于某个用户,也属于某个场所

审查控制员

views\reviews\create.js.erb

但它不会提交,没有错误

我认为我已经正确地设置了模型,并且有很多,我认为这是一个控制器问题,如果需要,我将添加其他代码位

开发日志

谢谢你的帮助

呼叫创建!(带感叹号)将引发异常,从而在保存失败时中止创建操作。检查日志/development.log以了解这些异常

使用build而不是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

您的错误似乎存在于
@current\u user
中。根据您的开发日志,当您调用
@current\u user时,
@current\u user
nil
。查看它。我想说的是,找出这个
@current\u user
实例变量的设置位置,并找出为什么它是
nil
。现在,您使用的是哪种身份验证?大多数身份验证插件,尤其是您提到的Railscasts的Ryan Bates使用的那些,使用局部变量,比如just
current_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])