在我的应用程序中,我有一个'仓库'模型,它拥有多个字段,如id,name,description等,以及一个名为'done'的布尔字段。
在我看来,我想插入一个按钮或链接字段,单击该字段时应设置(通过HTTP POST方法)warehouse.done = true 我怎么能这样做?
注意:用户无法输入warehouse.done字段,因此我想将其作为隐藏字段传递给应用程序
答案 0 :(得分: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以显示闪光通知。
<div id="flash_notice" style="display: none;"></div>
使用以下代码创建新的RJS模板“vote.js.erb”。
$("#flash_notice").html("You have voted successfully");
$("#flash_notice").show("slow");
如果您有任何问题,请告诉我。
答案 1 :(得分: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'