在给定高度共享的情况下干预新/编辑的Rails惯例

时间:2017-07-11 18:50:00

标签: ruby-on-rails ruby dry

newedit以及(createupdate)之间通常有很多相似之处。我发现,从历史上看,导致我创建的是一个标题为new_or_edit的单一视图,其中我使用各种权限标识符来更改所显示的信息。对于一个简单的人为例子......

def new
  @permission = "new"
  render 'new_or_edit'
end

def edit
  @permission = "edit"
  render 'new_or_edit'
end

# new_or_edit.html.erb
<% form_for ... %>
  <% if @permission == "new" %>
    <input id="name" />
  <% else %>
    <input id="email" />
  <% end %>
  <input id="story" />
<% end %>

从大会的角度来看,更多的是“Railsy”?我上面做的方式。或者有一个单独的new.html.erbedit.html.erb并拉入部分内容,因此重写将在下面:

def new
  @permission = "new"
end

def edit
  @permission = "edit"
end

# new.html.erb
<% form_for ... %>
  <%= render @permission %>
  <%= render "generic" %>
<% end %>

# edit.html.erb
<% form_for ... %>
  <%= render @permission %>
  <%= render "generic" %>
<% end %>

# _new.html.erb
<input id="name" />

# _edit.html.erb
<input id="email" />

# _generic.html.erb
<input id="story" />

就个人而言,我总是觉得我的方式,如果设计为可读,那就更好了,因为......

  1. 文件较少(我个人不喜欢使用Rails开发)

  2. 很高兴不重复类(例如,在form_for上)并且不可避免地,文本,如文件之间的介绍文本

  3. 那就是说,我现在正在问,因为我正在进行重构,并且宁愿没有其他Rails开发人员看这个/帮助我变得立即对我所写的过敏。 FWIW,按照我的风格,我也将类似地结合创建/更新方法。我意识到这会破坏CRUD,但我确实觉得它更容易分享(分享的程度取决于项目,在我的情况下,它是非常高度的共享)

1 个答案:

答案 0 :(得分:1)

而不是new_or_edit,为什么不选择一个并让另一个代表呢?这不那么冗长。在实践中,您通常会以不同的方式拆分,newedit只是在同一个表单周围装饰。

例如new

<% form_for ... do |form| %>
  <%= render partial: 'form', object: form %>
  <%= submit_tag 'Create' %>
<% end %>

在您调整标签的地方,任何&#34;取消&#34;链接转到,并在个案的基础上,大部分表单内容在_form部分。

拥有如此多的文件似乎是一件很麻烦的事情,但是合理数量的小型,简单,大部分是单用途的文件通常比一些复杂的文件更容易跟踪,因为它们非常复杂多用途。