我已经为此苦苦挣扎了一段时间。除了一些具体的帮助外,我将不胜感激一些指示,我可以如何填补我的知识空白。顺便说一句,我是 Rails 和 Web 开发的新手。我使用 DataTables 来显示表记录,并有一些代码向我显示用户选择的行的 ID。在我的索引视图中,我想使用该行 ID 来加载该数据行的编辑视图。我的 .js 代码如下:
$(document).ready(function() {
/* Init the table */
TableTools.DEFAULTS.aButtons = [];
oTable = $("#highways").dataTable({
sPaginationType: "full_numbers",
bJQueryUI: true,
"bProcessing": true,
"bServerSide": true,
iDisplayLength: 25,
sAjaxSource: $('#highways').data('source'),
"aoColumns": [
null,
null,
null,
null,
null
],
"sDom": 'T<"clear">lfrtip',
"oTableTools": {
"sRowSelect": "single",
"fnRowSelected": function ( node ) {
var oTT = TableTools.fnGetInstance('highways');
var aData = oTT.fnGetSelectedData();
var n = '/highways/' + aData[0][4] + '/edit'
alert(n);
var jqxhr = $.get(n, function() {
alert("success");
})
}
},
});
} );
开发日志显示:
在 2012-08-21 07:57:14 +1000 开始 GET "/highways/8/edit" for 127.0.0.1 由 HighwaysController#edit as / 参数处理:{"id"=>"8"} [1m[35mHighway加载(0.3ms)[0m SELECT
highways
.* FROMhighways
WHEREhighways
.id
>= 8 LIMIT 1 Highway BARKLY HIGHWAY 渲染的 Highways/_form.html.erb (67.1ms) 在 layouts/highways 内渲染的 Highways/edit.html.erb (258.5ms) 在 276ms 内完成 200 OK (Views: 274.6ms | ActiveRecord: 0.3小姐)
我在控制器代码中尝试了各种方法,在某些情况下,日志显示编辑视图已被重新渲染,但它没有显示在浏览器中。当前控制器代码:
class HighwaysController < ApplicationController
respond_to :html, :json
def index
# @highways = Highway.all
# logger.debug "Highway Count: #{@highways.size}"
respond_to do |format|
format.html
format.json { render json: HighwaysDatatable.new(view_context) }
end
结尾
def edit # logger.debug "Edit (render :layout => false) Highway ID #{params[:id]}" @highway = Highway.find(params[:id]) logger.debug "Highway #{@highway. name}" # 渲染 response_to 做 |format| format.html format.json { 渲染 json: HighwaysDatatable.edit(view_context) } 结束
$.get 返回 JSON 吗?
我也尝试过不同的方法。我在索引视图中有一个 link_to:
<div id ="highway_edit" >
<% @n = 11.to_s %>
<%= link_to "Edit 2", edit_highway_path(@n), :remote => true %>
</div>
这个硬编码版本有效,但我找不到从 javascript 代码中修改该链接以使其反映所选行 ID 的方法,或者调用将行 ID 返回到变量 @n 的函数。
我意识到我必须缺少一些基础知识,因此我将不胜感激一些建议的教育起点。我已经阅读了许多其他相关问题,但没有足够的知识来提取我需要的东西。
PS 我看到 DataTables 有一个编辑器功能,从长远来看,它几乎可以实现我想要实现的目标,但它还没有“准备好 Rails”。
谢谢!
编辑: 在准备这个问题时,我没有正确地将我的代码恢复到我想讨论的阶段。所以我更改了控制器代码和后续的开发日志。因此,问题不是模板错误,而是视图未呈现。
编辑 我已经解决了这个问题,现在有了结果。我在索引视图的顶部添加了一个新的 div('result' 类)并更改了我的 js 代码,如下所示:
var n = '/highways/' + aData[0][4] + '/edit'
$.get(n, function(data) {
$('.result').html(data);
并且编辑视图呈现在该 div 中。结果很难看,因为它会将表格向下推,并使 DataTable 的页眉和页脚翻倍。但至少它呈现。我不明白为什么这两种方式都通过控制器中的 Edit 方法起作用。我现在可以处理化妆品,或者更好地让编辑视图显示为模态覆盖。