我有一个构建表的索引页面,我试图允许用户编辑表中的行.我试图以最基本的方式做到这一点 - 没有javascript,ajax等,除非Rails提供它.
我的表在index方法中显示正常,并且有一个表单作为表中的最后一行,可用于添加新行.新表格工作正常.每行都有一个编辑链接,可以路由到控制器的编辑方法.控制器设置要编辑的对象,并使用要编辑的行中的表单呈现索引.我的问题是这个表单不会提交,但如果我刷新页面就会提交.
页面将在刷新后提交的事实非常令人困惑.我没有看到刷新会有什么不同然后点击链接(它应该仍然通过相同的路由,相同的变量对吗?)我看不到刷新前后的形式html有任何区别.有什么想法可能会发生什么?
我不确定甚至开始寻找什么代码,但是这里有.
index.html.erb
...
<tbody>
<% @boms.each do |line| %>
<% if line == @bom %>
<%= render("form_in_table", form_objects: @bom , button_text: "Update") %>
<% else %>
<%= render("bom_in_table", line: line) %>
<% end %>
<% end %>
<% if @bom.new_record? %>
<%= render("form_in_table", form_objects: [@li, @bom] , button_text: "Add") %>
<% end %>
</tbody>
...
Run Code Online (Sandbox Code Playgroud)
_form_in_table.html.erb
<%= form_for(form_objects, html: {class: "form-in-table"}) do |f| %>
<tr>
<td><%= f.text_field :quantity %></td>
<td colspan="2">
<%= f.select(:part_id,
options_from_collection_for_select(@parts, :id, …Run Code Online (Sandbox Code Playgroud) 我理解并理解通过将@放在Controller中的变量名前面,它在任何View加载时都可用.这非常有用,但我想了解它的魔力.它是如何发生的,可以停止吗?
我试图使用继承来干燥我的CRUDdy资源控制器,将大部分逻辑放入其中ApplicationController.超类应该引用抽象变量@resource(对于单个资源),@resources(对于资源集合)和@parent_resource(对于@resource嵌套时的父资源),但理想情况下,视图将获得更具体的名称,例如; @customer,@customers和@sales_territory分别.可以在不将所有对象(一次在抽象名称中,一次在具体名称中)的重复项发送到视图的情况下完成此操作?
在我写这篇文章时,想到的可能性是;
如何实现这一目标的正确选择是什么?
我知道您可以省略PHP纯文件的PHP结束标记,省略结束标记被认为是避免在输出中注入无关空格的好习惯.到目前为止我所看到的意见/标准清楚地表明我们应该省略纯PHP文件的结束标记,但是如果我们应该在文件混合HTML和PHP时放置结束标记则不太清楚.有些州直接说我们需要混合HTML和PHP的文件中的结束标记而没有任何关于原因的证据,而其他人只是通过解决纯PHP文件的情况而使其模糊不清.
是否有一些危险的副作用是要知道代码库是否省略了所有文件中的PHP结束标记,即使它们包含HTML?