使用ajax更新行状态

时间:2008-10-14 03:35:30

标签: ruby-on-rails ajax

我目前正在尝试使用Rails编写我的第一个ajax接口。

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

我正在考虑使用复选框而不是编辑链接。当用户单击复选框时,我想用状态,用户名和日期/时间更新数据库而不离开此页面。

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

2 个答案:

答案 0 :(得分: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 ...

答案 1 :(得分:1)

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

我必须编写link_to_remote这样的函数的参数

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

另外,如果您使用的是restful资源,请记住向routes.rb添加新操作 即。

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