【问题标题】:Update row status using ajax使用 ajax 更新行状态
【发布时间】:2008-10-14 03:35:29
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你也可以直接编辑你自己的问题,不需要在cmets中添加。

标签: ruby-on-rails ajax


【解决方案1】:

我认为复选框不是您要查找的内容的正确控件。 您说您希望用户能够批准或拒绝项目,这意味着您有 3 种状态:未处理、已批准和已拒绝。一个复选框只支持两种状态:关闭和开启

我会使用两个链接接受和拒绝,然后按如下方式进行。

在您看来:

...
<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 ...

【讨论】:

    【解决方案2】:

    这是对 Andrew 提出的解决方案的评论,

    我不得不像这样写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}
    

    【讨论】:

    • 感谢您的回答。我也添加了新动作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    相关资源
    最近更新 更多