我正在为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动态编辑单个表单?
是否需要对路由文件执行相同的操作?
非常感谢。
答案 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