2008-10-14 122 views
2

我目前正在尝试使用Rails编程我的第一个ajax接口。使用ajax更新行状态

该应用程序当前显示一个填充了列表项的表。用户必须批准或拒绝每个列表项。我目前在每行末尾都有一个编辑链接,显示可以批准列表项的表单。

我想使用复选框而不是编辑链接。当用户点击复选框时,我想用状态,用户名和日期/时间来更新数据库,而不用离开这个页面。

  1. 我应该遵循哪些步骤?
  2. 我可以使用复选框还是我只限于按钮 ?
  3. 我应该使用什么xxx_remote帮助器?
  4. 如何使用ajax调用的结果更新复选框状态?
+0

我应该使用的observe_field您正在使用RESTful资源 ? – hectorsq 2008-10-14 03:44:14

+0

您也可以直接编辑自己的问题,不需要在评论中添加内容。 – Tomalak 2008-10-14 04:56:36

回答

5

我不认为复选框是你正在寻找什么的正确控制。 你说你希望用户能够批准或拒绝项目,这意味着你有3个状态:未处理,批准和拒绝。一个复选框只支持2种状态:关闭和打开

我会使用两个链接接受和拒绝,然后按如下所示进行操作。

您认为:

... 
<tr id="item1"> 
    <td>Accept or Reject</td> 
    <td> 
    link_to_remote 'accept', :action => :accept, :id => 1, :method => :post 
    link_to_remote 'reject', :action => :reject, :id => 1, :method => :post 
    </td> 
</tr> 
... 

在你的控制器

def accept 
    item = Item.find(params[:id]) 
    item.accept 
    respond_to do |want| 
    want.js { 
     render :update do |page| 
     page << "$('item_#{item.id}').cells[0].innerHTML = 'Accepted'" 
     ...include other updates you need to make to your row... 
     page.visual_effect :highlight, "item_#{item.id}" 
     end 
    } 
    end 
end  
... similar for reject method ... 
+0

我刚刚更新了我的应用程序。它工作得很好! – hectorsq 2008-10-14 19:02:13

1

这是由安德鲁提出的解决方案评论,

我不得不写的link_to_remote PARAMS像这样的功能

link_to_remote 'reject', :url => {:action => :reject, :id => item.id, :method => :post} 

此外,要添加新的行动,你的routes.rb如果即

map.resources :items, :member => {:accept => :post, :reject => :post}