Ruby on rails erb中条件句的预处理

Ruby on rails erb中条件句的预处理,ruby-on-rails,ruby,preprocessor,erb,Ruby On Rails,Ruby,Preprocessor,Erb,我想尽我所能地擦干代码,但我认为这可能太枯燥了 我有一个partial的fields\u,有时候我需要通过关系来设置它,有时候对象本身的fields\u <%= form_for model_name do |f| %> <%= render partial: 'fields_for_partial', locals: {f: f, ... } %> <% end %> 部分的其余部分将是带有ff等的常规字段 这显然是一个巨大的失败 如何编写此类代码

我想尽我所能地擦干代码,但我认为这可能太枯燥了

我有一个partial的
fields\u,有时候我需要通过关系来设置它,有时候
对象本身的
fields\u

<%= form_for model_name do |f| %>


 <%= render partial: 'fields_for_partial', locals: {f: f, ... } %>

<% end %>
部分的其余部分将是带有
ff
等的常规
字段

这显然是一个巨大的失败


如何编写此类代码?

将调用移动到共享部分之外的
字段中。以一个项目和一项任务为例。您允许用户同时创建项目和任务

# using HAML
# project form
= form_for @project do |f|
  = f.fields_for :tasks do |tf|
    = render 'tasks/form', f: tf
您还允许用户仅创建任务

# task form
= form_for @task do |f|
  = render 'tasks/form', f: f
tasks/_-form.html.haml
partial将如下所示

# task fields
= f.text_field :title
= f.text_area :description

您可以使用本地\u分配:

<% form_or_view = local_assigns[:f] || self %>
<%= form_or_view.fields_for object_name, obj do |ff| %>


什么是
f
?您希望如何处理此代码块的其他部分?即
?f的
字段的内容为nil或块变量的形式为u(这部分调用了字段\u。如果你正在加载一个表单,那么
f
就会出现。我不明白你想做什么?所有的表单都是一个表单?如果你正在为
编写
form\u,表单应该在那里。如果你不确定,就不要使用form\u。问题是有时候我需要在表单的上下文中使用字段\u,等等。)有时作为一个独立的,只是为了呈现一个对象的字段。第一个解决方案的问题是它与冲突,是的,您需要使用第二个选项。首先删除,因为不适用。谢谢!我不得不将它更改为对象的形式_或_view.fields__|name | obj,因为rails不喜欢显式名称为nil
<% form_or_view = local_assigns[:f] || self %>
<%= form_or_view.fields_for object_name, obj do |ff| %>