【问题标题】:Camel case labels on f.submit form buttonsf.submit 表单按钮上的驼峰式标签
【发布时间】:2016-09-08 15:46:48
【问题描述】:

我有一个非常标准的 Rails 应用程序,其标准形式如下:

<%= simple_form_for @foo_bar do |f| %>
  <%= f.input :some_fields %>  
  <%= f.submit %>
<% end %>

它按预期工作,只是按钮上的标签结束了

<input type="submit" name="commit" value="Update Foo bar">

<input type="submit" name="commit" value="Create Foo bar">

我遇到的问题是“Foo bar”。我知道这是一个骆驼案例模型类名称问题。我也知道我可以这样做:

<input type="submit" name="commit" value="<%= action_name == 'new' ? 'Create' : 'Update' %> Foo">

<%= f.submit "#{action_name == 'new' ? 'Create' : 'Update'} Foo Bar" %>

但只是想知道我是否缺少更优雅的方法?

【问题讨论】:

标签: ruby-on-rails ruby simple-form


【解决方案1】:

您可以在使用此表单进行部分渲染时发送参数。

new.html.erb

<%= render 'form', button: 'Create'  %>

edit.html.erb

<%= render 'form', button: 'Update' %>

_form.htm.erb

<%= simple_form_for @foo_bar do |f| %>
  <%= f.input :some_fields %>  
  <%= f.submit "#{button} Foo Bar" %>
<% end %>

【讨论】:

  • 我可以这样做,但是在 3 个文件中的自定义代码与 f.submit 中的一个相比
  • 你想要什么,但我的例子在rails中推荐
  • 同意。此类事情的模型是有一个用于edit.html.erb 的视图,一个用于new.html.erb 的视图,并且两者都共享_form.html.erb 中的实际表单元素。在前两个视图中,表单本身是通过将其呈现为部分而被拉入的。行为上的差异是由传递给渲染部分的值触发的。
【解决方案2】:

我也遇到了同样的问题,而且比你想象的要容易解决;

对于 f.submit 按钮,您可以这样做:

  <%= f.submit "Create Foo Bar" %>

或者你可以试试这个:

<%= f.submit "create foo bar".titleize %>

对于标签,您可以这样做:

<%= f.label :create_foo_bar, "Create Foo Bar" %>

第一个参数并不像大多数人想象的那样是标题。 Rails 期望第一个参数是对象名称,因此如果您不传递带有真实标题的第二个参数(选项),它会自动将其设为标题。

【讨论】:

  • 我明白了,但我想澄清一下,我希望有一种方法可以将“Foo Bar”或“Bar”传递到提交中,它会添加“更新”或“创建”取决于行动。
  • 哦,对不起,是的,在这种情况下,我认为您所做的 if else 语句非常好。你也可以把? : 在方法中的 application_helper.rb 中声明,然后只在视图中调用该方法,而不是整个 if else 语句......这样视图中的代码就更简洁了。
  • 我也在想同样的事情......我猜这只是 Rails 的一个怪癖,并没有太多解决办法。我想我可以委托一个类“Bar
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-15
  • 2020-02-01
  • 2020-06-05
  • 1970-01-01
  • 1970-01-01
  • 2019-01-25
相关资源
最近更新 更多