-1

ホイ、

ドラッグ アンド ドロップでオブジェクトを更新できる Rails ページを作成しようとしました (そして成功しました :-)。カードをテーブルに表示し、列にドロップすると属性が更新されます。ここまでは順調ですが、残念ながらアップデートがカードに反映されていません。私はそれを見るためにサイト全体をリロードする必要があります (そして、はい、私は <% = ... を使用します :-) 私が見るログでは、パーシャルがレンダリングされていることがわかります:

Started PUT "/cards/6" for 127.0.0.1 at 2013-03-21 16:55:42 +0100
Processing by CardsController#update as JS
Parameters: {"utf8"=>"✓", "authenticity_token"=>"B+xkdpwcIcslidgHQPh+I1n+Qh/MxltM=", "card"=>{"user_id"=>"2", "state_id"=>"1"}, "id"=>"6"}
Card Load (0.1ms)  SELECT "cards".* FROM "cards" WHERE "cards"."id" = ? LIMIT 1  [["id", "6"]]
(0.1ms)  begin transaction
(0.2ms)  UPDATE "cards" SET "user_id" = 2, "updated_at" = '2013-03-21 15:55:42.630330' WHERE "cards"."id" = 6
(3.2ms)  commit transaction
State Load (0.1ms)  SELECT "states".* FROM "states" WHERE "states"."id" = ? LIMIT 1  [["id", 1]]
Rendered cards/_card.html.erb (2.8ms)
Completed 200 OK in 9ms (Views: 3.5ms | ActiveRecord: 3.8ms)

しかし、ブラウザでは、user_id はまだ 3 です。そのため、通知も表示しようとしました。

format.js {render @card, notice: "nanu"}

しかし、成功しません。通知も表示されません。

私のパーシャルは次のようになります。

<%= form_for(@card, remote: true) do |f| %>
  <div id="card_<%= @card.id %>" class="card_mini">
    <h3><%= link_to @card.titel, edit_card_path(@card) %></h3>
    <p><%= @card.beschreibung %></p>
    <%= @card.user_id %> <!-- just to control the rendering -->
    <%= f.text_field :user_id, type: "hidden" %>
    <%= f.text_field :state_id, type: "hidden" %>
    <div class="status"><%= @card.state_id ? State.find(@card.state_id).status : "--" %></div >
    <%= link_to 'Destroy', @card, method: :delete, data: { confirm: 'Are you sure?' }, :class => "aktion" %>
  </div>
<% end %>

何かヒントはありますか?ありがとう、S.

4

2 に答える 2

0

コメントから判断すると、 の DOM を更新する必要がありますupdate.js.erb。次のようなものです:

$("#<%= dom_id(@card) %>").append("<%=j render 'card/card', card: @card %>");
于 2013-03-21T19:03:47.340 に答える
0

ck3g さん、ご協力ありがとうございます。今では動作します。私が学ばなければならなかった2つのこと:

  1. Rails は ajax リクエストを処理しますが、DOM の更新は処理しません。ここで、xxx.js.erb がステージに入ります。
  2. format.js の後にレンダリング リクエストを配置しないでください

したがって、コントローラーでの正しい呼び出しは次のとおりです。

respond_to do |format|
  format.html { render action: "whatever you want, or redirect or..." }
  format.js
end

次に、レールは action.js.erb (私の場合は update.js.erb) をレンダリングします。update.js.erb に必要なコードは次のとおりです。

$("#card_<%= @card.id %>").html('<%=j render @card %>');

現在、私のログでは、パーシャルのレンダリングと update.js.erb のレンダリングを見つけています。

于 2013-03-22T08:02:12.420 に答える