【发布时间】:2010-12-25 16:57:53
【问题描述】:
我已经被困在这个问题上几天了,恐怕我缺乏正确提出这个问题的词汇,但非常感谢任何反馈!
我正在开发一个基本的博客网站。用户可以创建带有标题、描述的帖子,并声明其他人是否可以看到该帖子(公共或私人)。从索引页面,我希望用户能够看到他们的帖子列表,切换公共|私人,并删除帖子。列表很简单(我正在根据用户的帖子呈现部分内容),并且 AJAX 删除链接运行良好:
<%= link_to 'Delete Post', post, :confirm => 'Are you sure?', :method => :delete, :remote => true %>
切换公共|私人对应于编辑/更新操作,我无法弄清楚如何使用链接或按钮来做到这一点——看来我必须使用表单。我已经尝试了很多看起来像这样的工作删除按钮的变体(但没有一个工作):
<%= link_to 'Make Public', { :controller => "posts", :action => "update", :id => post, :public => true, :post => post }, :method => :put, :remote => true %>
似乎唯一可行的方法是使用表单,但这需要用户单击Update Post 按钮:
<%= 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 %>
那么,在 Rail3 中更新单个属性的正确方法是什么? (有更合适的措辞吗?)可以使用链接或按钮来完成吗?我必须使用表格吗?是否有 Rails3 方式(如 destroy.js.erb)来添加 onclick/onchange 事件,还是我需要开发自己的 JavaScript?
Zabba 的回答很棒;但是,我最终使用了通过 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>
JavaScript:
$('.pp').live('click', function(){
$(this).siblings('form').submit();
});
对这两种方法有意见吗?是不是更惯用的一种?
【问题讨论】:
标签: ajax ruby-on-rails-3