2012-03-15 59 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