【发布时间】:2014-10-11 15:51:31
【问题描述】:
Ruby 2.0.0、Rails 4.0.3、jquery-datatables-rails 2.2.3 (DataTables 1.10.2)
我想在我的表单上有两个按钮,一个显示所有项目,另一个仅显示当前分配给当前用户的项目。鉴于我什至为此走上了正确的道路,而且我不确定自己是否正确,我有两个问题。还是我走错了路?
在控制器操作中,我试图将当前用户传递给由 ItemsDatatable 控制器创建的视图。调试显示索引操作运行了两次。第一次,按预期设置用户。第二次,用户为 nil,因此它永远不会传递给 ItemsDatatable。为什么会这样,我该如何解决? (如果我在控制器索引操作中无条件设置用户,则通过。)
第二个问题更深奥。如果我能够在初始化中设置@user,我如何将其传递给 as_json 和其他 ItemsDatatable 操作?我想这是特定于 jquery-datatables-rails 的,我可能必须找出它的逻辑来决定如何做到这一点?或者有没有一种 Rails 方法可以很好地做到这一点?
仅供参考,这是 RailsCasts 340 中的 DataTables 模式,已针对 DataTables 1.10.2 进行了更新。
感谢您的帮助。
主页按钮:
<%= link_to 'Status-My Items', items_path(select: "mine"), :class => 'btn btn-primary' %>
<%= link_to 'Status-All Items', items_path(select: "all" ), :class => 'btn btn-primary' %>
ItemsController 索引操作:
def index
user ||= params[:select] == "mine" ? current_user : nil
respond_to do |format|
format.html
format.json { render json: ItemsDatatable.new(view_context, user) }
end
end
ItemsDatatable 控制器:
class ItemsDatatable < ApplicationController
delegate :params, :h, :link_to, :edit_item_path, :new_item_path, :location, to: :@view
def initialize(view, user)
@view = view
@user = user
end
def as_json(options = {})
{
draw: params[:draw].to_i,
recordsTotal: Item.count,
recordsFiltered: items.total_entries,
data: data
}
end
private
def data
todays_date = Date.today
items.map do |item|
[
link_to(item.stock_number, edit_item_path(item))
]
end
end
def items
@items ||= fetch_items
end
def fetch_items
items = Item.order("#{sort_column} #{sort_direction}")
items = items.page(page).per_page(per_page)
if params[:search][:value].present?
items = items.where("stock_number ilike :search, search: "%#{params[:search][:value]}%")
end
items
end
def page
params[:start].to_i/per_page + 1
end
def per_page
params[:length].to_i > 0 ? params[:length].to_i : 10
end
def sort_column
columns = %w[stock_number]
columns[params[:order]['0'][:column].to_i]
end
def sort_direction
params[:order]['0'][:dir] == "desc" ? "desc" : "asc"
end
end
【问题讨论】:
标签: ruby-on-rails jquery-datatables-rails