是否可以在Rails中的特定视图的部分内显示某些元素?例如,我希望根据视图更改提交按钮的文本:所以,如果我在new.html.erb中,我希望提交按钮显示为<%= f.submit 'Create Account' %>
和{{1}用于edit.html.erb。非常规的方法是手动将自定义代码添加到每个视图中,但是在我的_form.html.erb部分中有一种聪明的方法吗?
答案 0 :(得分:2)
首先,我建议将其放入新视图和编辑视图中。但是,如果您愿意,可以关闭params[:action]
。如在
<%= f.submit(((params[:action] == 'new') ? 'Create' : 'Update') + ' Account') %>
答案 1 :(得分:2)
将simple_form与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 %>
答案 2 :(得分:2)
如果您的意图是使用单个部分,我是第二个kdeisz的答案。如果您使用两个单独的视图,则不需要他编写的行 - 您可以在每个视图中的相同按钮上使用不同的名称,而无需条件逻辑。
回答您的补充问题:未来的可变性和DRY代码之间存在权衡。如果您的新编辑需求和编辑需求开始显着不同,那么如果您使用它来渲染主要功能,那么您的部分逻辑中会有很多臃肿,难以更改的条件逻辑。
如果您将视图分开,这可能会重复大量代码,但它也会使各个页面更容易更改;每个视图的功能将根据每个HTTP动词的需要进行定制。
答案不是完全符合REST或干“仅仅因为”,而是要问自己什么会导致更多的工作。如果您的新页面和编辑页面基本相同,但是对于一些非常小的功能,单个部分(DRY)更实用。如果您将来看到它们显着不同,请将它们分成两个视图(较少干,但更多可更改)。
PARAMS。每个对Rails的请求都将根据用户请求的路由自动包含一个动作和一个控制器;例如,导航到/foo/bar
可能会触发控制器bar
的操作foo
,具体取决于您设置config/routes.rb
的方式。 Rails会自动填写params[:action]
和params[:controller]
。可以找到有关如何工作以及如何访问路径和请求参数的详细说明here。