我在名为_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}"
,它只显示一个空按钮(根本没有文字)。欢迎任何建议。
答案 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将使用控制器变量而不是本地。