【发布时间】:2014-03-11 09:37:36
【问题描述】:
我正在使用 Rails 制作一个使用 Ajax 分页的datatable,我正在关注railscast #340 这样做。
本集使用名为ProductsDatatable 或在我的情况下为OrdersDatatable 的普通ActiveModel 类来创建和配置表。我的问题与此类中的 ruby 语法有关。我正在尝试将一组订单从控制器传递给OrdersDatatable 对象。我想在fetch_orders 方法中访问这个集合。
我在 order.rb 中这样创建表对象:
@datatable = OrdersDatatable.new(view_context)
@datatable.shop_id = @current_shop.id
@datatable.orders_list = @orders # which is Order.in_process
而我的OrdersDatatable 类看起来像这样:(可能需要更改的重要部分是initialize 中的第二行和fetch_orders 中的第一行)
class OrdersDatatable
include Rails.application.routes.url_helpers
include ActionView::Helpers::DateHelper
include ActionView::Helpers::TagHelper
delegate :params, :h, :link_to, :number_to_currency, to: :@view
attr_accessor :shop_id, :orders_list
def initialize(view)
@view = view
@orders_list = self.orders_list
end
def current_shop
Shop.find(shop_id)
end
def as_json(options = {})
{
sEcho: params[:sEcho].to_i,
iTotalRecords: orders.count,
iTotalDisplayRecords: orders.count,
aaData: data
}
end
private
def data
orders.map do |order|
[
order.id,
order.name,
h(time_tag(order.date_placed.in_time_zone)),
order.state,
order.source,
order.payment_status,
h(order.delivered? ? 'shipped' : 'unshipped'),
h(number_to_currency order.final_total, unit: order.currency.symbol),
h(link_to 'details', edit_admin_shop_order_path(current_shop, order)),
h(link_to 'delete', admin_shop_order_path(current_shop, order), method: :delete, data: { confirm: 'Are you sure?' } ),
]
end
end
def orders
@orders ||= fetch_orders
end
def fetch_orders
orders = orders_list.order("#{sort_column} #{sort_direction}")
orders = orders.page(page).per_page(per_page)
if params[:sSearch].present?
orders = orders.where("title like :search", search: "%#{params[:sSearch]}%")
end
orders
end
def page
params[:iDisplayStart].to_i/per_page + 1
end
def per_page
params[:iDisplayLength].to_i > 0 ? params[:iDisplayLength].to_i : 10
end
def sort_column
columns = %w[id name date_placed state source payment_status delivered final_total]
columns[params[:iSortCol_0].to_i]
end
def sort_direction
params[:sSortDir_0] == "desc" ? "desc" : "asc"
end
end
当我将fetch_orders 中的第一行更改为此
orders = Order.in_process.order("#{sort_column} #{sort_direction}")
这是硬编码的等价物,它确实有效。所以我只需要正确的语法
【问题讨论】:
标签: ruby-on-rails ruby parameters datatables activemodel