例如,我可能会有一些像:
<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" ... %>
你怎么处理这个?是一个好主意,甚至可能将所有这些行动合并为一个部分,并通过确定当前行动是什么来呈现不同的部分?
答案 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
或许有更好的方式来获取行动名称:)。