使用部分变量在提交按钮上自定义文本

时间:2017-09-20 21:18:20

标签: ruby-on-rails

我在名为_configuration_form.html.erb

的部分内容中有以下表单
<%= form_for @configuration, url: admin_config_path, method: :put do |f| %>
  <%= f.label :chars %>
  <%= f.number_field :chars %>
  <%= f.submit @submit_text %>
<% end %>

我将@configuration@submit_text作为局部变量传入partial,如下所示:

<%= render :partial => 'layouts/admin/configuration_form',
           :locals => {@configuration => :configuration, @submit_text => "Update configurations"} %>

@configuration变量在从控制器绘制数据时似乎正常工作。但是,提交按钮显示默认文本,根据rails默认值。

我的问题是:我在这里做错了什么来防止出现所需的自定义按钮文本,还是有办法强制使用局部变量?我也尝试使用"#{@submit_text}",它只显示一个空按钮(根本没有文字)。欢迎任何建议。

1 个答案:

答案 0 :(得分:2)

将locals传递给partial的正确语法是:

<%= render :partial => 'layouts/admin/configuration_form',
           :locals => {configuration: @configuration, submit_text: "Update configurations"} %>

然后,部分应该是:

<%= form_for configuration, url: admin_config_path, method: :put do |f| %>
  <%= f.label :chars %>
  <%= f.number_field :chars %>
  <%= f.submit submit_text %>
<% end %>

或者,您可以在控制器中实例化@submit_text并保留部分内容:

<%= form_for @configuration, url: admin_config_path, method: :put do |f| %>
  <%= f.label :chars %>
  <%= f.number_field :chars %>
  <%= f.submit @submit_text %>
<% end %>               

然后在你的控制器中打电话给你的部分:

<%= render :partial => 'layouts/admin/configuration_form' %>

在这种情况下,partial将使用控制器变量而不是本地。