在我的應用程序中,我有一個'倉庫'模型,它擁有幾個字段,如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