在我的应用程序中,我有一个'仓库'模型,它拥有几个字段,如id,名称,描述等,以及一个名为'done'的布尔字段。Rails 3.1通过帖子传递数据
在我看来,我想插入一个按钮或链接场,其中,点击后,应该设置(通过HTTP POST方法)warehouse.done =真 我怎样才能做到这一点?
注意:用户不能输入warehouse.done字段,所以我想将它传递给应用程序作为隐藏字段
在我的应用程序中,我有一个'仓库'模型,它拥有几个字段,如id,名称,描述等,以及一个名为'done'的布尔字段。Rails 3.1通过帖子传递数据
在我看来,我想插入一个按钮或链接场,其中,点击后,应该设置(通过HTTP POST方法)warehouse.done =真 我怎样才能做到这一点?
注意:用户不能输入warehouse.done字段,所以我想将它传递给应用程序作为隐藏字段
我做了几个假设的意见,控制器上。
HTML
<a href="#" id="set-warehouse-done"> DONE </a>
<input id="warehouse-id" type="hidden" value="24">
JS
$(document).ready(function() {
$('#set-warehouse-done').click(function() {
$.ajax({
url: '/warehouse/' + $('#warehouse-id').attr('value');
type: 'POST'
data: done: true
});
});
}
warehouse_controller.rb
def update
@warehouse = Warehouse.find(params[:id])
if params[:done]
if @warehouse.update_attributes(:done, params[:done])
flash[:notice] = 'Warehouse updated successfully'
else
flash[:error] = 'Could not update warehouse'
好的,在我看来我写道: <%= link_to“完成”,:method =>:post,:values => {:done => true}%>;我怎样才能根据你的代码修改视图? – Marco 2012-03-15 09:05:41
使用链接与远程选项。
<%= link_to "Vote", {:controller=>"your_controller_name", :action => 'vote',:id=>@warehouse.id, :vote=>true}, :remote=> true, :method => :put %>
在你的控制器
def vote
@warehouse = Warehouse.find(params[:id])
@warehouse.update_attribute(:vote, params[:vote])
respond_to do |format|
format.js
end
end
在你的路由文件
resources :your_controller_name do
collection do
put 'vote'
end
end
在你的投票视图页面中添加新的DIV显示Flash通知。
<div id="flash_notice" style="display: none;"></div>
使用以下代码创建新的RJS模板“vote.js.erb”。
$("#flash_notice").html("You have voted successfully");
$("#flash_notice").show("slow");
让我知道你是否有任何问题。
你打算使用Ajax吗? – 2012-03-15 08:52:49
是的,阿贾克斯对我来说没问题 – Marco 2012-03-15 09:07:21
我已经更新了答案朋友 – 2012-03-15 09:32:34