繁体   English   中英

使用指定的.js.erb从表中删除行时,Rails:ActionView :: Template :: Error

[英]Rails: ActionView::Template::Error while removing row from table using designated .js.erb

需要在Rails 4.2 中使用jQuery从表中删除行的帮助 单击绿色按钮后,我希望删除整行并刷新表格。

至于逻辑,我正在处理文档和用户。 用户能够隐藏文档并将注释附加到特定的隐藏中。 因此,我决定创建其他模型Hiding ,其中包含对UserDocument的引用以及其他相关信息:

hiding.rb

class Hiding < ActiveRecord::Base
  belongs_to :document
  belongs_to :user
end

从另一个角度看, 文档用户模型具有以下关联:

has_one :hiding

单击绿色按钮后,将调用控制器的取消隐藏操作:

class Admin::HidingsController < AdminController
  authorize_resource

  def index
    @hidings = Hiding.all.page params[:page]
  end

  def unhide
    @hidings = Hiding.all.page params[:page]
    @hiding = Hiding.where(document_id: params[:id])

    # update document and delete hiding from DB 
    search_un_hide_document(false, nil)
  end
end

但是,当我想通过unhide.js.erb执行表行的删除时

$('#<%=@hiding.document.id%>').remove()

触发以下异常:

ActionView :: Template :: Error(#Hiding :: ActiveRecord_Relation:0x0000000c4508d8>的未定义方法`document')

当我是Rails的新手时,我已经坚持了一段时间。 但是,无法弄清楚如何正确删除那些行而又不重新渲染整个页面。

非常感谢您的建议。 提前致谢!

def unhide
   @hidings = Hiding.all.page params[:page]
   @hiding = Hiding.where(document_id: params[:id]).first

   # update document and delete hiding from DB 
   search_un_hide_document(false, nil)
end

可能您忘记为@hiding添加.first

编辑:

代替where()。first,还可以使用find_by(document_id:params [:id])

find_by的定义如下

def find_by(*args)
  where(*args).take
end

现在,就顺序而言,“接单”与“第一”有所不同。 first根据主键的顺序返回第一条记录,而take则返回数据库首先弹出的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM