Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Rails 4:使用AJAX仅更新一个参数的自定义操作_Javascript_Jquery_Ruby On Rails_Ajax_Ruby On Rails 4 - Fatal编程技术网

Javascript Rails 4:使用AJAX仅更新一个参数的自定义操作

Javascript Rails 4:使用AJAX仅更新一个参数的自定义操作,javascript,jquery,ruby-on-rails,ajax,ruby-on-rails-4,Javascript,Jquery,Ruby On Rails,Ajax,Ruby On Rails 4,在我的Rails 4应用程序中,我有一个日历和一个Post模型,使用浅路线: 日历上有许多帖子,帖子属于日历 我已经在post show.html.erb视图中对PostsUpdate操作使用AJAX调用来更新帖子的custom:approval参数: 我的PostsUpdate控制器中有respond_to do | format | format.js end 我在app/views/posts/中有一个update.js.erb视图来重新加载post show.html.erb视图的相应部

在我的Rails 4应用程序中,我有一个日历和一个Post模型,使用浅路线:

日历上有许多帖子,帖子属于日历

我已经在post show.html.erb视图中对PostsUpdate操作使用AJAX调用来更新帖子的custom:approval参数:

我的PostsUpdate控制器中有respond_to do | format | format.js end 我在app/views/posts/中有一个update.js.erb视图来重新加载post show.html.erb视图的相应部分 当然,我的链接设置为remote:true 现在,我需要实现一个类似的功能,来更新帖子的custom:approval参数,但是要从calendar show.html.erb视图中更新所有帖子

这是我当前在calendar show.html.erb视图中的内容:

当我单击其中一个链接以更新后期审批时,浏览器中不会发生任何事情

但是,在log/development.log中,我有:

我做错了什么


-----

我认为您应该能够通过js.erb中的一个条件做到这一点:

<% if @post.approval === 'ok' %>
    $('td.post_approval_section').replaceWith("<%= j render(:partial => 'calendar/approval') %>");
<% else %>
// you current update post code 
<% end %>
同时将代码移动到_approval.html.erb


希望这能有所帮助。

我想出了两个办法来处理这种情况:

第一种方法:当您从calendar show.html.erb更新帖子时,传入另一个参数,因此指向的链接将是:

现在,当您从Calendar show.html.erb更新帖子时,帖子控制器将加载RAILS\u ROOT/app/views/posts/update\u Post\u approval.js.erb而不是update.js.erb


第二种方法:为更新Post的approval属性创建另一个路由,这意味着您还将在Post controller中创建另一个操作,以处理日历页面中的AJAX更新情况。

感谢您的回答,这对经验丰富的人来说必须是有意义的。因为我是新手,我不得不说我很困惑。我在app/views/posts中已经有一个“_approval.html.erb”文件。还有,你应该把什么代码放在你说的地方//you current update post code?非常感谢。我正在尝试第一种方法。有没有办法选择在PostsUpdate控制器中调用哪个.js.erb文件?谢谢您的添加。然后,我猜,在update_post_approval.js.erb中,我用类post_approval_部分重新加载与div对应的部分,对吗?此外,我是否需要为新的更新发布审批创建新路线?谢谢。我刚刚更新了我的问题来说明我现在的处境。你有没有可能看一下,让我知道这个代码还有什么问题?嘿@ThibaudClement,你忘了在链接中把审批更新传递给post路径。应该是post.id,post[approval]=>ok,approval\u update:true,remote:true,:method=>:patch do%>让我们来看看。
<td class="cell_content_center post_approval_section">
  <% if post.approval == "ok" %>
    <span class="ok_green">
  <% else %>
    <span class="approval_blue" %>
  <% end %>
    <%= link_to post_path(:id => post.id, "post[approval]" => "ok"), remote: true, :method => :patch do %>
      <span class="glyphicon glyphicon-ok" data-toggle="tooltip" data-placement="left" title="Approve Post"></span>
    <% end %>
  </span><br/>
  <% if post.approval == "edit" %>
    <span class="edit_yellow">
  <% else %>
    <span class="approval_blue" %>
  <% end %>
    <%= link_to post_path(:id => post.id, "post[approval]" => "edit"), remote: true, :method => :patch do %>
    <span class="glyphicon glyphicon-repeat" data-toggle="tooltip" data-placement="left" title="Require Edits"></span>
  <% end %>
  </span><br/>
  <% if post.approval == "remove" %>
    <span class="remove_red">
  <% else %>
    <span class="approval_blue" %>
  <% end %>
    <%= link_to post_path(:id => post.id, "post[approval]" => "remove"), remote: true, :method => :patch do %>
    <span class="glyphicon glyphicon-remove" data-toggle="tooltip" data-placement="left" title="To Be Deleted"></span>
  <% end %>
  </span>
</td>
#calendars/show.html.erb and calendars/_post_approval.html.erb

<td class="cell_content_center post_approval_section">
  <% if post.approval == "ok" %>
    <span class="ok_green">
  <% else %>
    <span class="approval_blue" %>
  <% end %>
    <%= link_to post_path(:id => post.id, "post[approval]" => "ok"), remote: true, approval_update: true, :method => :patch do %>
      <span class="glyphicon glyphicon-ok" data-toggle="tooltip" data-placement="left" title="Approve Post"></span>
    <% end %>
  </span><br/>
  <% if post.approval == "edit" %>
    <span class="edit_yellow">
  <% else %>
    <span class="approval_blue" %>
  <% end %>
    <%= link_to post_path(:id => post.id, "post[approval]" => "edit"), remote: true, approval_update: true, :method => :patch do %>
    <span class="glyphicon glyphicon-repeat" data-toggle="tooltip" data-placement="left" title="Require Edits"></span>
  <% end %>
  </span><br/>
  <% if post.approval == "remove" %>
    <span class="remove_red">
  <% else %>
    <span class="approval_blue" %>
  <% end %>
    <%= link_to post_path(:id => post.id, "post[approval]" => "remove"), remote: true, approval_update: true, :method => :patch do %>
    <span class="glyphicon glyphicon-remove" data-toggle="tooltip" data-placement="left" title="To Be Deleted"></span>
  <% end %>
  </span>
</td>

#posts_controller.rb

def update
    if params["approval_update"]
      respond_to do |format|
        format.js { render :action => "update_post_approval" }
      end
    else
      respond_to do |format|
        if @post.update(post_params)
          format.html { redirect_to post_path(@post) }
          format.json { render :show, status: :ok, location: @post }
          format.js
        else
          format.html { render :edit }
          format.json { render json: @post.errors, status: :unprocessable_entity }
        end
      end
    end
  end

  def update_post_approval
    respond_to do |format|
      format.js
    end
  end

#update_post_approval.js.erb

$('td.post_approval_section').html('<%= j render(partial: "calendars/post_approval") %>');
Started PATCH "/posts/42?post%5Bapproval%5D=edit" for ::1 at 2015-11-19 19:59:51 -0800
Processing by PostsController#update as JS
  Parameters: {"post"=>{"approval"=>"edit"}, "id"=>"42"}
  [1m[36mUser Load (1.1ms)[0m  [1mSELECT  "users".* FROM "users" WHERE "users"."id" = $1  ORDER BY "users"."id" ASC LIMIT 1[0m  [["id", 1]]
  [1m[35mPost Load (2.2ms)[0m  SELECT  "posts".* FROM "posts" WHERE "posts"."id" = $1 LIMIT 1  [["id", 42]]
  [1m[36m (1.1ms)[0m  [1mBEGIN[0m
  [1m[35mSQL (1.1ms)[0m  UPDATE "posts" SET "approval" = $1, "updated_at" = $2 WHERE "posts"."id" = $3  [["approval", "edit"], ["updated_at", "2015-11-20 03:59:51.203371"], ["id", 42]]
  [1m[36mSQL (3.6ms)[0m  [1mINSERT INTO "versions" ("event", "object", "whodunnit", "created_at", "object_changes", "item_id", "item_type") VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING "id"[0m  [["event", "update"], ["object", "---\nid: 42\ncalendar_id: 8\ndate: 2015-11-19 20:19:00.000000000 Z\nsubject: Armistice 2\nformat: Image\ncopy: Joyeux 11 novembre tout le monde. ++\ncreated_at: 2015-11-19 20:19:58.244685000 Z\nupdated_at: 2015-11-20 03:59:44.073894000 Z\nimage_file_name: armistice.jpg\nimage_content_type: image/jpeg\nimage_file_size: 35967\nimage_updated_at: 2015-11-19 20:19:57.792047000 Z\nshort_copy: etg'tg' <<\nscore: \nfacebook: true\ntwitter: true\ninstagram: false\npinterest: false\ngoogle: false\nlinkedin: false\ntumblr: \nsnapchat: \napproval: ok\n"], ["whodunnit", "1"], ["created_at", "2015-11-20 03:59:51.203371"], ["object_changes", "---\napproval:\n- ok\n- edit\nupdated_at:\n- 2015-11-20 03:59:44.073894000 Z\n- 2015-11-20 03:59:51.203371000 Z\n"], ["item_id", 42], ["item_type", "Post"]]
  [1m[35m (2.0ms)[0m  COMMIT
  Rendered posts/_approval.html.erb (0.6ms)
  Rendered posts/update.js.erb (2.1ms)
Completed 200 OK in 59ms (Views: 10.9ms | ActiveRecord: 11.1ms)
<% if @post.approval === 'ok' %>
    $('td.post_approval_section').replaceWith("<%= j render(:partial => 'calendar/approval') %>");
<% else %>
// you current update post code 
<% end %>
  <% if post.approval == "ok" %>
    <span class="ok_green">
  <% else %>
    <span class="approval_blue" %>
  <% end %>
    <%= link_to post_path(:id => post.id, "post[approval]" => "ok"), remote: true, :method => :patch do %>
      <span class="glyphicon glyphicon-ok" data-toggle="tooltip" data-placement="left" title="Approve Post"></span>
    <% end %>
  </span><br/>
  <% if post.approval == "edit" %>
    <span class="edit_yellow">
  <% else %>
    <span class="approval_blue" %>
  <% end %>
    <%= link_to post_path(:id => post.id, "post[approval]" => "edit"), remote: true, :method => :patch do %>
    <span class="glyphicon glyphicon-repeat" data-toggle="tooltip" data-placement="left" title="Require Edits"></span>
  <% end %>
  </span><br/>
  <% if post.approval == "remove" %>
    <span class="remove_red">
  <% else %>
    <span class="approval_blue" %>
  <% end %>
    <%= link_to post_path(:id => post.id, "post[approval]" => "remove"), remote: true, :method => :patch do %>
    <span class="glyphicon glyphicon-remove" data-toggle="tooltip" data-placement="left" title="To Be Deleted"></span>
  <% end %>
  </span>
<%= link_to post_path(:id => post.id, "post[approval]" => "remove", approval_update: true), remote: true, :method => :patch do %>
if params["approval_update"]
  respond_to do |format|
    format.js { render :action => "update_post_approval" }
  end
else
  respond_to do |format|
  ...
  end
end