我正在尝试将我的rails应用程序中的索引视图转换为使用jQuery数据表,使用服务器端数据处理来搜索,排序和分页记录集,这些记录集将由ActiveModel :: Serializer
呈现DataTable需要一个如下所示的JSON对象:
{
draw: 1,
iTotalRecords: @records_count,
iTotalDisplayRecords: @records_filtered_count,
sEcho: params[:sEcho],
aaData: [
[ <column 1 value>, <column 2 value>, etc ],
[ <column 1 value>, <column 2 value>, etc ],
...
]
}
目前我在名为index.json.haml的视图模板中呈现它。它看起来像这样:
= raw({ draw: 1,
iTotalRecords: 1000,
iTotalDisplayRecords: 100,
sEcho: params[:sEcho],
aaData: [
[ <column 1 value>, <column 2 value>, etc ],
[ <column 1 value>, <column 2 value>, etc ],
...
] }.to_json)
我试图在序列化程序中执行此JSON渲染,以便我可以摆脱视图模板,只需将以下内容添加到我的控制器中:
def index
respond_to do |format|
format.html
format.json do
render json: @my_objects, serializer: MyObjectsSerializer
end
end
end
到目前为止,这是我的序列化程序的样子:
class AssetDetailTitlesSerializer < ActiveModel::Serializer
attributes :draw, :iTotalRecords, :iTotalDisplayRecords, :sEcho, :aaData
def draw
1
end
def iTotalRecords
1000
end
def iTotalDisplayRecords
100
end
def sEcho
'what is this'
end
def aaData
object.map do |my_object|
[
my_object.<column 1 getter>,
my_object.<column 2 getter>,
etc.
]
end
end
end
当然我会为iTotalRecords等提供真正的价值,但我的主要问题是我调用助手来生成每个字段中的内容 - 例如,一列是需要调用的链接rails path / url helper。其他列调用帮助程序,突出显示与搜索查询匹配的文本。
这些帮助程序在序列化程序中不可用,并且还调用params
,这在视图/控制器之外没有意义。
我的问题是所有这些查看帮助程序的调用都纠缠在我的序列化程序代码中。当我在index.json.haml中呈现JSON时,这不是问题,因为视图逻辑属于那里。所以我的问题是:这是否很好地使用了序列化器?我的目标是清理我的观点和控制器,但是现在我把混乱推到了另一个对象,它会变得更加混乱(假设我可以让它完全工作)