部分渲染但未显示

时间:2013-03-21 16:27:43

标签: jquery ruby-on-rails partial

海,

我尝试(并成功:-)构建一个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上。

2 个答案:

答案 0 :(得分:0)

根据评论判断,您必须更新update.js.erb中的DOM。 Smth喜欢:

$("#<%= dom_id(@card) %>").append("<%=j render 'card/card', card: @card %>");

答案 1 :(得分:0)

谢谢你,ck3g,谢谢你的帮助!现在它有效。我必须学习两件事:

  1. Rails负责处理ajax请求,但不负责更新DOM。这就是xxx.js.erb进入舞台的地方。
  2. 从不在format.js
  3. 之后提交渲染请求

    因此,控制器中的正确呼叫是:

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

    然后rails将呈现action.js.erb(在我的例子中是update.js.erb)。 我在update.js.erb中需要的代码是:

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

    现在在我的日志中,我找到了部分渲染和update.js.erb的渲染。