2017-11-21 10 views
0

私は記入したフォームに基づいてユーザー情報を入力するテーブルを用意しています。私がしたいことの一つは、管理者がそのユーザーで作業が完了したらテーブル行を「アーカイブ」できるようにすることです。クリック時にブートストラップテーブル行を無効にしてRuby on Railsに保存します

私がこれを行うことができる2つの方法は、その行のアーカイブボタンがクリックされたときに特定のテーブル行をグレーアウトするか、またはその行をアーカイブされたユーザー専用の別のテーブル。

私は、管理者がここで最大のものは、それが保存持つことが主で再び

それを必要とする場合にだけ、アーカイブ、ユーザーの情報を削除する必要はありません。

ここに私の現在のテーブルには、私のindex.html.erbファイルから次のとおりです。

<table id="table-current" width="100%" data-toggle="table" class="table"> 
    <h3>Current Submissions</h3> 
    <thead> 
    <tr> 
     <th data-sortable="true">Name</th> 
     <th data-sortable="true">Email</th> 
     <th data-sortable="true">Phone Number</th> 
     <th data-sortable="true">Pick Up Address</th> 
     <th data-sortable="true">City</th> 
     <th data-sortable="true">Pick Up Date</th> 
     <th data-sortable="true">Pick Up Time</th> 
     <th data-sortable="true">Instructions</th> 
     <th data-sortable="false">Options</th> 
    </tr> 
    </thead> 
    <% @clients.each do |client| %> 
     <tr class="table-row"> 
     <td><%= client.first_name %> <%= client.last_name %></td> 
     <td><a href="mailto:<%= client.email %>"><%= client.email %></a></td> 
     <td><a href="tel:<%= client.phone_number %>"><%= number_to_phone(client.phone_number) %></a></td> 
     <td><a href="https://maps.google.com/?q=<%= client.pick_up_location %>&t=m" target="_blank"><%= client.pick_up_location %></a></td> 
     <td><%= client.city %></td> 
     <td><%= client.pick_up_date %></td> 
     <td><%= client.pick_up_time.strftime("%l:%M %p") %></td> 
     <td><%= client.instructions %></td> 
     <td class="table-options"> 
      <%= link_to edit_client_path(client) do %> 
      <i class="ion-edit"></i> 
      <% end %> 
      <button class="archive"> 
      <i class="ion-ios-box"></i> 
      </button> 
     </td> 
     </tr> 
    <% end %> 
</table> 

すべてのヘルプは歓迎です!ありがとうございました!

答えて

0

パラノイアは素敵な宝石ですが、ActiveRecordのdestroyメソッド(https://github.com/rubysherpas/paranoia/blob/92505787662e0415f228a3507a885ba771058ff1/lib/paranoia.rb#L72)を無効にするという注意点があります。

あなたがそれに慣れているなら、パラノイアは完璧に素晴らしい宝石です。

もう1つの選択肢は、独自の戦略を展開することです。パラノイアは、本質的に、破棄を呼び出すときに記入するために、モデルに別の列を追加するだけです。あるいは、archivedのような独自の列を追加してブール値にすることもできます(または、宝石のようにタイムスタンプを付けてarchived_atを使用することもできます)。私はモデルで肯定を使用するのが好きなので、新しいレコードが作成されたときにはtrueという既定の列activeを呼び出し、レコードをアーカイブするときはfalseに変更します。

これで、レコードをアーカイブするときに、テーブルに添付されたajaxリンクとプロセスを使用して、コントローラにメッセージを送信して新しい列を更新することができました。最後に、テーブルに論理を追加して、この新しい列に基づいてレコードを表示または非表示にする(またはグレーアウトする)か、またはクラスにスコープを作成してスコープ付きコレクションのみをビューに送信します:

アプリ/モデル/ client.rb

class Client 

    scope :active, -> { where(active: true) } 
    scope :archived, -> { where(active: false) } 

    ... 
end 

アプリ/コントローラ/ clients_controller。RB

class ClientsController 

    def index 
    @clients = Client.active 
    end 
    ... 
end 

あなたはすべてのレコードを表示するが、ちょうどあなたがテーブルの行に条件付きのクラスを追加することができ、行を灰色にしたい場合:

あなたのクラスが「アーカイブ」スタイルでしょう
<tr class="table-row <%= ‘archived’ unless client.active? %>"> 

ご自由にどうぞ。この部分を達成するにはいくつかの方法がありますが、これは単なる一例です。

+0

私はミニ・エピファニーを持っていて、この質問を投稿した後にこれを行うことを考えました。私はこれを撃つつもりだ! –

+0

「あなたのAjaxリンクとプロセスを使用できるようになった」と言ったら、どうすればいいですか?私はAJAXをよく知っているわけではありません。 –

+0

ああ、申し訳ありませんが、私はこの記事を読んでいたときに、あなたがAjaxを使って言及したと思っていましたが、明らかにするには、これを行うためにAjaxは必要ありません。モデルを更新し、ページをリロードする標準的な方法でリダイレクトを呼び出すことができます。 Ajaxは、プロセスを非同期にしたい場合、このようなインスタンスでは、リロードを表示せずにフィールドがアーカイブされているように見えます。 – inveterateliterate

1

このために別のテーブルを用意する必要はありません。

https://github.com/rubysherpas/paranoia

この宝石を見てみましょう。あなたが望むものはソフト削除です。それぞれのテーブルにdeleted_atを追加します。 ajaxベースの削除を使用すると、行全体がグレーアウトされてアーカイブとして表示されるようになります。

<% @clients.each do |client| %> 
    <tr class="table-row" id="client_<%= client.id %>"> 
     <td><%= client.first_name %> <%= client.last_name %></td> 
     <td class="table-options"> 
     <%= link_to edit_client_path(client) do %> 
      <i class="ion-edit"></i> 
     <% end %> 
     <button class="archive"> 
      <i class="ion-ios-box"></i> 
     </button> 
     </td> 
    </tr> 
    <% end %> 

あなたの行に一意のIDを割り当てることができます。次に、js.erbを使用してAJAX機能を使用します。

関連する問題