Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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
Ajax Rails3:在没有表单的情况下更新属性是否有最佳实践?_Ajax_Ruby On Rails 3 - Fatal编程技术网

Ajax Rails3:在没有表单的情况下更新属性是否有最佳实践?

Ajax Rails3:在没有表单的情况下更新属性是否有最佳实践?,ajax,ruby-on-rails-3,Ajax,Ruby On Rails 3,我已经在这个问题上纠结了几天,恐怕我没有足够的词汇来正确地提出这个问题,但是任何反馈都非常感谢 我在一个基本的博客网站上工作。用户可以创建带有标题、说明的帖子,并声明其他人是否可以看到该帖子(公共或私人)。在索引页面中,我希望用户能够看到他们的帖子列表,切换public | private,并删除帖子。列表很简单(我根据用户的帖子呈现了一个部分),AJAX删除链接运行良好: <%= link_to 'Delete Post', post, :confirm => 'Are you s

我已经在这个问题上纠结了几天,恐怕我没有足够的词汇来正确地提出这个问题,但是任何反馈都非常感谢

我在一个基本的博客网站上工作。用户可以创建带有标题、说明的帖子,并声明其他人是否可以看到该帖子(公共或私人)。在索引页面中,我希望用户能够看到他们的帖子列表,切换public | private,并删除帖子。列表很简单(我根据用户的帖子呈现了一个部分),AJAX删除链接运行良好:

<%= link_to 'Delete Post', post, :confirm => 'Are you sure?', :method => :delete, :remote => true %>
那么,在Rail3中,更新单个属性的正确方法是什么?(还有更合适的措辞吗?)?我必须使用表格吗?有没有Rails3方法(比如destroy.js.erb)来添加onclick/onchange事件,或者我需要开发自己的JavaScript


扎巴的回答很好;然而,我最终使用了通过JavaScript(特别是jQuery)提交的隐藏表单

他认为:

<div>
  <%= form_for(post, :remote => true) do |f| %>
    <%= f.hidden_field :public, { :value => !post.public } %>
  <% end %>
  <% if post.public == true %>
    <div class="pp">Public</div>
  <% else %>
    <div class="pp">Private</div>
  <% end %>
</div>
对这两种方法有何评论?还有一个习惯用法吗?

我会这样做(未经测试,因此可能会有一些小错误):

  • PostsController

    a。链接“应该是:'你确定吗?',:method=>:put,:remote=>true%>

    b、 该操作将接收帖子的id(
    params[:id]

  • 在Post模型上定义一个名为
    make_public
    的方法 a、 调用
    update\u属性:公开=>true

  • 执行更新的链接应该是PUT而不是GET(始终将所有状态更改操作放在POST或PUT后面)

    <%= form_for(post, :remote => true) do |f| %>
      <div class="field">
        <%= f.label :public %><br />
        <%= f.check_box :public %>
      </div>
      <div class="actions">
        <%= f.submit %>
      </div>
    <% end %>
    
    <div>
      <%= form_for(post, :remote => true) do |f| %>
        <%= f.hidden_field :public, { :value => !post.public } %>
      <% end %>
      <% if post.public == true %>
        <div class="pp">Public</div>
      <% else %>
        <div class="pp">Private</div>
      <% end %>
    </div>
    
    $('.pp').live('click', function(){
      $(this).siblings('form').submit();
    });