2012-03-15 88 views
1

在我的应用程序中,我有一个'仓库'模型,它拥有几个字段,如id,名称,描述等,以及一个名为'done'的布尔字段。Rails 3.1通过帖子传递数据

在我看来,我想插入一个按钮或链接场,其中,点击后,应该设置(通过HTTP POST方法)warehouse.done =真 我怎样才能做到这一点?

注意:用户不能输入warehouse.done字段,所以我想将它传递给应用程序作为隐藏字段

+0

你打算使用Ajax吗? – 2012-03-15 08:52:49

+0

是的,阿贾克斯对我来说没问题 – Marco 2012-03-15 09:07:21

+0

我已经更新了答案朋友 – 2012-03-15 09:32:34

回答

1

我做了几个假设的意见,控制器上。

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' 
+0

好的,在我看来我写道: <%= link_to“完成”,:method =>:post,:values => {:done => true}%>;我怎样才能根据你的代码修改视图? – Marco 2012-03-15 09:05:41

3

使用链接与远程选项。

<%= 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"); 

让我知道你是否有任何问题。

+0

谢谢我的朋友,现在它的作品。另一件事:如果我想显示一个Flash通知,一旦用户点击“投票”链接,我该怎么办? – Marco 2012-03-15 11:03:19

+0

更新了Flash通知的代码。 – 2012-03-15 11:41:24

+0

非常感谢! – Marco 2012-03-15 14:04:47