0

私はしばらくこれに苦労してきました。いくつかの具体的な助けと同様に、私の知識のギャップを埋める方法についてのいくつかの指針に感謝します. ところで、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 で 127.0.0.1 の GET "/highways/8/edit" を開始 HighwaysController#edit as / パラメーター: {"id"=>"8"} [1m[35mHighway Load (0.3ms)[0m SELECT highways.* FROM highwaysWHERE highways. id>= 8 LIMIT 1 Highway BARKLY HIGHWAY レンダリングされた highways/_form.html.erb (67.1ms) レンダリングされた highways/edit.html.erb 内の layouts/highways (258.5ms) 276ms で 200 OK を完了 (ビュー: 274.6ms | ActiveRecord: 0.3 MS)

コントローラー コードでさまざまなことを試しましたが、場合によっては、ログに編集ビューが再レンダリングされたというメッセージが表示されますが、ブラウザーには表示されません。現在のコントローラ コード:

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}" # Respond_to do をレンダリング |format| format.html format.json { render json: HighwaysDatatable.edit(view_context) } end

$.get は JSON を返しますか?

私も別のアプローチを試みました。index ビューに link_to があります。

 <div id ="highway_edit" >
   <% @n = 11.to_s %>
   <%= link_to "Edit 2", edit_highway_path(@n), :remote => true %>
 </div>  

このハード コードされたバージョンは機能しますが、選択した行 ID を反映するように JavaScript コード内からそのリンクを変更する方法や、行 ID を変数 @n に返す関数を呼び出す方法を見つけることができませんでした。

私が欠けている基礎がいくつかあるに違いないことを認識しているので、私の教育の出発点として提案されているものをいくつか教えていただければ幸いです。関連する他の多くの質問を読みましたが、必要なものを抽出するのに十分な知識がありません。

PS DataTables には、長期的に達成したいことのほとんどを行うエディター機能があることがわかりますが、「Rails 対応」ではありません。

ありがとう!

編集: この質問を準備する際に、議論したい段階にコードを適切に復元しませんでした。ということでコントローラーコードとその後の開発ログを変更しました。したがって、問題はテンプレート エラーではなく、ビューがレンダリングされないことです。

編集 私はこの問題を進めており、結果が得られました。新しい div (「結果」のクラス) をインデックス ビューの上部に追加し、js コードを次のように変更しました。

var n = '/highways/' + aData[0][4] + '/edit'
$.get(n, function(data) {
    $('.result').html(data);

編集ビューはその div にレンダリングされます。テーブルを押し下げ、DataTable ヘッダーとフッターを 2 倍にするため、結果は醜いものになります。しかし、少なくともそれはレンダリングされます。両方の方法がコントローラーの Edit メソッドを介して行われる場合、これが機能する理由がわかりません。これで化粧品に取り掛かることができます。編集ビューをモーダル オーバーレイとして表示することもできます。

4

1 に答える 1

0

行をクリック (またはできればダブルクリック) して、その行の編集ビューをロードできるようにしたいと考えています。そんな風にこれからも目指していきます。それまでの間、ビューへのリンクを追加しました。

<div id="EditLink">
   <%= link_to "Edit Highway", :controller => :highways, :action => :edit, :id => 1 %>
</div>  

コールバック関数に次のコードを含めます。

"oTableTools": {
                      "sRowSelect": "single",
                      "fnRowSelected": function(node) {
                        var oTT = TableTools.fnGetInstance('highways');
                        var aData = oTT.fnGetSelectedData();
                        $("div#EditLink a").attr('href','/highways/' + aData[0][4] +  '/edit')
                        }
                      },     

選択した行の ID に基づいてリンクを変更します。この方法を使用する場合、ユーザーは最初に行を選択してからリンクをクリックすることを知っている必要があります。最初に行を選択しない場合、デフォルト (id = 1) に移動します。そのような ID がテーブルに存在することを確認する必要があります。

于 2013-02-28T21:45:23.230 に答える