使用一个'_form.html.erb';对于某些视图,显示部分但不同的元素

使用一个'_form.html.erb';对于某些视图,显示部分但不同的元素,html,ruby-on-rails,Html,Ruby On Rails,对于Rails中的特定视图,是否可以在局部视图中显示某些元素?例如,我希望提交按钮的文本根据视图的不同而变化:因此,如果我在new.html.erb中,我希望提交按钮在edit.html.erb中显示为、和。非常规的方法是手动将自定义代码添加到每个视图中,但在我的_form.html.erb partial中是否有一种聪明的方法可以做到这一点?首先,我建议将其添加到新视图和编辑视图中。但是,如果需要,可以关闭params[:action]。如 <%= f.submit(((params[:

对于Rails中的特定视图,是否可以在局部视图中显示某些元素?例如,我希望提交按钮的文本根据视图的不同而变化:因此,如果我在new.html.erb中,我希望提交按钮在edit.html.erb中显示为、
。非常规的方法是手动将自定义代码添加到每个视图中,但在我的_form.html.erb partial中是否有一种聪明的方法可以做到这一点?

首先,我建议将其添加到新视图和编辑视图中。但是,如果需要,可以关闭
params[:action]
。如

<%= f.submit(((params[:action] == 'new') ? 'Create' : 'Update') + ' Account') %>

首先,我建议将其放入“新建”和“编辑”视图中。但是,如果需要,可以关闭
params[:action]
。如

<%= f.submit(((params[:action] == 'new') ? 'Create' : 'Update') + ' Account') %>

与i18n一起使用。SimpleForm使其自动生成

例如:

  <%= simple_form_for(@message) do |f| %>
    <%= f.error_notification %>
    <%= f.input :title %>
    <%= f.input :description %>
    <%= f.button :submit, class: "btn btn-primary" %>
  <% end %>

与i18n一起使用。SimpleForm使其自动生成

例如:

  <%= simple_form_for(@message) do |f| %>
    <%= f.error_notification %>
    <%= f.input :title %>
    <%= f.input :description %>
    <%= f.button :submit, class: "btn btn-primary" %>
  <% end %>

如果您打算使用单个部分,我支持kdeisz的回答。如果你使用两个独立的视图,他写的这行就没有必要了——你可以在每个视图的同一个按钮上使用不同的名称,而不需要任何条件逻辑

回答您的补充问题:在未来的可变性和干代码之间有一个折衷。如果您的新需求和编辑需求将开始显著不同,那么如果您使用partial渲染主要功能,您的partial中将有大量臃肿、难以更改的条件逻辑

如果将视图分开,这可能会重复大量代码,但也会使单个页面更容易更改;每个视图的功能都将根据每个HTTP谓词的需要进行专门定制

答案不是完全遵守休息或“仅仅因为”而晾干,而是问问自己什么会导致今后更多的工作。如果您的新页面和编辑页面基本相同,但有一些非常小的功能,那么单个部分(干燥)页面更实用。如果您看到它们在将来有明显的差异,请将它们分为两个视图(不太干燥,但更多变)


Params。向Rails发出的每个请求将根据用户请求的路由自动包括一个操作和一个控制器;例如,导航到
/foo/bar
可能会触发控制器
foo
的操作
bar
,具体取决于您如何设置
config/routes.rb
。Rails会自动用它们填充
params[:action]
params[:controller]
。可以找到一个很好的解释,说明这是如何工作的,以及如何访问路径和请求参数。

如果您打算使用单个部分,我支持kdeisz的回答。如果你使用两个独立的视图,他写的这行就没有必要了——你可以在每个视图的同一个按钮上使用不同的名称,而不需要任何条件逻辑

回答您的补充问题:在未来的可变性和干代码之间有一个折衷。如果您的新需求和编辑需求将开始显著不同,那么如果您使用partial渲染主要功能,您的partial中将有大量臃肿、难以更改的条件逻辑

如果将视图分开,这可能会重复大量代码,但也会使单个页面更容易更改;每个视图的功能都将根据每个HTTP谓词的需要进行专门定制

答案不是完全遵守休息或“仅仅因为”而晾干,而是问问自己什么会导致今后更多的工作。如果您的新页面和编辑页面基本相同,但有一些非常小的功能,那么单个部分(干燥)页面更实用。如果您看到它们在将来有明显的差异,请将它们分为两个视图(不太干燥,但更多变)


Params。向Rails发出的每个请求将根据用户请求的路由自动包括一个操作和一个控制器;例如,导航到
/foo/bar
可能会触发控制器
foo
的操作
bar
,具体取决于您如何设置
config/routes.rb
。Rails会自动用它们填充
params[:action]
params[:controller]
。您可以找到一个很好的解释,说明这是如何工作的,以及如何访问路径和请求参数。

谢谢。在每个视图中放置这条线的原因是什么?这不违背干巴巴的原则吗?如果我省略了action参数,Rails如何识别我是否在使用它呢?action参数由应用程序控制器自动添加到params散列中。我把它放在每个视图中,因为在我看来,它是视图中不必要的逻辑。问题是,这完全是一个意见问题。如果你喜欢它的_形式部分,保持它在那里!谢谢在每个视图中放置这条线的原因是什么?这不违背干巴巴的原则吗?如果我省略了action参数,Rails如何识别我是否在使用它呢?action参数由应用程序控制器自动添加到params散列中。我把它放在每个视图中,因为在我看来,它是视图中不必要的逻辑。问题是,这完全是一个意见问题。如果你喜欢它的_形式部分,保持它在那里!谢谢你的详细解释。