Rails 3.1通过帖子传递数据

时间:2012-03-15 08:34:35

标签: ruby-on-rails

在我的应用程序中,我有一个'仓库'模型,它拥有多个字段,如id,name,description等,以及一个名为'done'的布尔字段。

在我看来,我想插入一个按钮或链接字段,单击该字段时应设置(通过HTTP POST方法)warehouse.done = true 我怎么能这样做?

注意:用户无法输入warehouse.done字段,因此我想将其作为隐藏字段传递给应用程序

2 个答案:

答案 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'