【问题标题】:Rails dataTables add link_toRails 数据表添加 link_to
【发布时间】:2013-10-04 20:51:50
【问题描述】:

我正在使用 Railscast 的一种方法来远程访问 dataTables 的表。

这是 workorders4_datatable.rb 中代码的开始:

class Workorders4Datatable

delegate :params, :h, :link_to, :number_to_currency, to: :@view

def initialize(view)
  @view = view
end

def as_json(options = {})
  {
      sEcho: params[:sEcho].to_i,
      iTotalRecords: Workorder.external.count,
      iTotalDisplayRecords: workorders.external.total_entries,
      aaData: data
  }
end

private

def data
  workorders.external.map do |workorder|
    [
        link_to(workorder.id, workorder),
        h(workorder.parent.try(:id)),
        h(workorder.description),
        h(workorder.client.try(:client_name)),
        h(workorder.woasset.try(:assetnum)),
        h(workorder.type.try(:typecode)),
        h(workorder.billmethod.try(:method_name)),
        h(workorder.workgroup.try(:group_name)),
        h(workorder.employee.try(:employee_full_name)),
        h(workorder.wostatus.try(:statuscode)),
        h(workorder.expenses.tobill.sum("quantity") * workorder.expenses.sum("unitcost")),
        h(workorder.events.tobill.sum("hours")),
        h(workorder.events.sum("hours")),
        link_to('ADD Invoice', new_invoice_path(:workorder_id => workorder), :class => 'btn btn-primary')
    ]
  end
end

除了这一行之外,所有这些都可以工作:

link_to('ADD Invoice', new_invoice_path(:workorder_id => workorder), :class => 'btn btn-primary')

它会导致这个错误:

NoMethodError - undefined method `new_invoice_path' for #<Workorders4Datatable:0x007f94513588a0>:

但是,以下内容在不同的视图中起作用:

<%= link_to 'ADD Invoice', new_invoice_path(:workorder_id => @workorder.id), :class => 'btn btn-primary' %>

有什么方法可以让它工作吗?

【问题讨论】:

  • 忽略最后一条评论。这是一个助手委托问题。见顶部delegate to:@view。这就是为什么link_to 工作正常但路径却不行的原因。你也可以委托:new_invoice_path,或者@view.new_invoice_path
  • 感谢您的帮助。我不确定你建议我改变什么。我要添加delegate to:@view.new_invoice_path 吗?
  • 成功了!!如果你回答,我很乐意接受。

标签: ruby-on-rails datatables


【解决方案1】:

您是否尝试将new_invoice_path 替换为@view.new_invoice_path?那可能行得通。原因是因为new_invoice_path 应该在view 的上下文中调用,但它是在Workorders4Datatable 的上下文中调用的。

我过去曾将这种模式视为一种捷径:

def v
  @view
end

v.new_invoice_path

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    相关资源
    最近更新 更多