【问题标题】:How to update certain parts of a form如何更新表单的某些部分
【发布时间】:2011-12-15 16:30:06
【问题描述】:

我希望创建一个类似的报告,每行旁边都有一个复选框。每行都有一些可编辑的字段(例如 cmets)。我想要的是让用户能够通过选中该行旁边的复选框来检查他/她想要更新的行。然后我会在表单底部有一个保存按钮,它只更新旁边有一个复选框处于活动状态的行。

总的来说,我对 Rails 和 Web 编程还很陌生,所以你能给我的任何建议/指导都应该很有帮助。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 forms checkbox


    【解决方案1】:

    实现此目的的一种流行方法是:

    1- 您的所有复选框都应使用相同的名称。

    2- 所有复选框的值都应该是行/对象的 ID

    3- POST 表单时,POST 数据中只有选中的复选框。检索这些 IDS 并仅更新这些对象。

    例如,您的复选框应该是这样的:

    <%= check_box_tag "row_ids[]", row.id, false, :id => "row_#{row.id}" %>
    

    然后,在您的控制器中:

    Row.find(params[:row_ids]).each do |row|
      # do whatever you want
    end
    

    【讨论】:

    • 我的控制器中的 Row 必须是模型吗?还是你的意思是使用我的报告背后的模型?
    • 也...这是我特别不清楚的部分 - “Row.find”部分在我的控制器中的位置?我目前在我的控制器中只有 initialize() 和 show()。我需要一种不同的方法来处理帖子吗?
    • 行是你的模型。这段代码进入一个控制器动作。
    【解决方案2】:

    你可以这样做,但它为用户增加了更多的工作:他们必须在点击更新之前检查多个复选框。如果他们只是点击更新并且它有效,那就更好了。

    基本思想是您希望用户只需单击更新,您的代码只更新已更改的记录。

    您可以做的是存储(在隐藏字段标签中)每行记录的 ID。然后,当您更新时,您遍历所有行并从数据库中获取(基于存储在隐藏字段中的 ID)记录。假设只有评论是可编辑的。然后,您可以检查 cmets 是否已实际更改(例如使用简单的字符串比较),如果有,请更新它。如果有更多内容是可编辑的,那么您也可以在决定是否需要更新之前检查它们。

    这是一个高级描述,但如果您需要更多实现细节,请告诉我。

    【讨论】:

      猜你喜欢
      • 2010-12-13
      • 1970-01-01
      • 2013-06-12
      • 1970-01-01
      • 2020-01-23
      • 2012-10-02
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      相关资源
      最近更新 更多