【问题标题】:Rails convention for DRYing up new/edit given high degree of sharing鉴于高度共享,Rails 约定干燥新/编辑
【发布时间】:2017-07-11 18:50:00
【问题描述】:

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)和不可避免的文本,比如文件之间的介绍文本

也就是说,我现在问是因为无论如何我都在进行重构,并且不希望其他看到这个/帮助我解决它的 Rails 开发人员立即对我所写的内容过敏。 FWIW,以我的风格,我也将类似地结合创建/更新方法。我意识到这会破坏 CRUD,但我确实觉得共享的内容如此之多时会更容易(意识到共享程度取决于项目,在我的情况下,这是非常高的共享程度)

【问题讨论】:

    标签: ruby-on-rails ruby dry


    【解决方案1】:

    而不是new_or_edit,为什么不直接选择一个并让另一个代表参与呢?这不那么冗长。在实践中,您通常会以不同的方式拆分事物,其中 newedit 只是围绕相同形式的装饰。

    例如new:

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

    您需要调整标签的位置,任何“取消”链接的位置等等,具体情况视具体情况而定,并且大部分表单内容都在 _form 部分中。

    拥有这么多文件可能看起来很麻烦,但合理数量的小、简单、主要是单一用途的文件通常比一些复杂的文件更容易跟踪,因为它们是如此多-目的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 2012-02-05
      • 1970-01-01
      相关资源
      最近更新 更多