在Rails中使用Ajax将表格行编辑为表单字段

时间:2018-11-26 21:45:21

标签: ruby-on-rails ajax forms

我正在为Rails中的应用程序管理功能。

页面上有一个表格,其中列出了特定模型“属性”的一系列属性。

我希望用户能够单击每一行,并通过渲染部分内容来使属性值可编辑。为此,我假设我需要为每个属性创建一个部分,并在每个部分中使用类似的形式,并在其中一个与用户单击的属性相关的可见字段。

类似的东西:

查看:

    <tr id="edit_price" data-link="<%= 'edit_field_price_path' %>">
    <% if !@property.price.blank? %>
      <th scope="row">Price</th>
      <td>$<%= @property.price %></td>
      <td>Edit</td>
    <% else %>
    <th scope="row" class="empty">Price</th>
    <td class="empty">Add price</td>
    <% end %>
</tr>

部分:

<%= form_with model: @property, method: :put do |f| %>
<%= f.number_field :price %>
<%= f.hidden_field ONE_FOR_EACH_VALUE, value: ATTRIBUTE_VALUE %>
...
<% end %>

问题是我有40多个可以编辑的潜在字段,这意味着我需要在单独的文件中创建40多个部分并将它们全部添加到我的route.rb文件中。

我该如何提出更智能的解决方案?

是否可以将属性名称作为变量传递并使用jquery动态编辑单个表单?

是否需要对路由文件执行相同的操作?

非常感谢。

2 个答案:

答案 0 :(得分:0)

为此,您可以使用类似best in place gem之类的东西,它基本上会创建所需的功能,而不是针对整个行,而是针对特定属性。

阅读配置文档,之后,您可以在视图上创建clickable / editable属性

<%= best_in_place @user, :name, :as => :input %>

这将创建可单击的文本,这将触发前端上的输入以对其进行编辑。

答案 1 :(得分:0)

我最终创建了所有这些部分。它们具有不同类型的字段,所以我找不到任何优化方法。

运行一个单独的jquery脚本,该脚本根据字段名称来标识每个部分的放置位置,以访问每个form partial,这使实现变得容易一些。在这里提出了建议:Concatenate jquery variable into Rails partial