你如何处理rails部分的命名约定?

时间:2010-05-07 11:22:39

标签: ruby-on-rails naming-conventions partial

例如,我可能会有一些像:

<div>
  <%= f.label :some_field %><br/>
  <%= f.text_field :some_field %>
</div>

适用于编辑和新操作。我也会有一个像:

<div>
  <%=h some_field %>
</div>

表演动作。所以你会认为所有的部分都在shared之类的目录下。我看到的问题是,这两个都会导致冲突,因为它们基本上是相同的部分,但对于不同的行为,所以我做的是:

<!-- for edit and new actions -->
<%= render "shared_edit/some_partial" ... %>

<!-- for show action -->
<%= render "shared_show/some_partial" ... %>

你怎么处理这个?是一个好主意,甚至可能将所有这些行动合并为一个部分,并通过确定当前行动是什么来呈现不同的部分?

1 个答案:

答案 0 :(得分:4)

当我使用shared目录时,我在里面放了模型名称,而我的部分名称是这样的:

shared/person/_show.html.erb
shared/person/_form.html.erb

如果您想要一行来渲染表单或显示部分,那么您可以添加帮助:

def render_form_or_show(model)
  if edit? || new? 
    return render :partial => "shared/#{model}/form"
  elsif show?
    return render :partial => "shared/#{model}/show"
  end
  return ""
end

如果您放弃一些规则,例如将您的部分放在共享目录中,然后放在模型目录中,然后始终使用_form进行编辑和新建,并使用_show进行show动作,那么它将起作用;)。当然,您需要定义edit?等方法:

# Application controller
def edit?
  params[:action] == 'edit'
end

或许有更好的方式来获取行动名称:)。