用简单形式的属性erb内插(Rails)

时间:2018-07-26 23:31:53

标签: ruby-on-rails ruby ruby-on-rails-5 erb string-interpolation

我正在使用Ruby on Rails,并且有一个简单的表单gem,如下所示:

  

代码问题

<%= simple_form_for [:admins, @calendar_entry],
                    url: toggle_visibility_admins_calendar_entry_path(calendar_entry),
                    method: :patch,
                    remote: true do |f| %>
  <%= f.input_field :visible,
                    id: 'switch-sm-#{calendar_entry.id.to_s}',
                    class: 'switch',
                    type: 'checkbox' %>
<% end %> 

它会以HTML格式获得以下输出(检查输入中的 id属性):

<form novalidate="novalidate" class="simple_form new_calendar_entry" id="new_calendar_entry" action="/admins/calendar_entries/35/toggle_visibility" accept-charset="UTF-8" data-remote="true" method="post">
  <input id="switch-sm-#{calendar_entry.id.to_s}" class="boolean optional switch" type="checkbox" value="1" name="calendar_entry[visible]">
</form>

忽略简单形式的remote: true和所有属性,真正的问题是 id属性中的插值,出于任何原因,无法获取变量的数据,但是,我可以这样做:

  

标准错误代码

<%= simple_form_for [:admins, @calendar_entry],
                    url: toggle_visibility_admins_calendar_entry_path(calendar_entry),
                    method: :patch,
                    remote: true do |f| %>
  <%= f.input_field :visible,
                    id: 'switch-sm-'+calendar_entry.id.to_s,
                    class: 'switch',
                    type: 'checkbox' %>
<% end %> 

是的,这第二个代码有效,但是我想通过第一个选项通过插值来实现,所以我的问题是:

我为什么没有在“代码问题”中通过插值获取数据?

1 个答案:

答案 0 :(得分:3)

执行字符串插值时需要使用双引号,并且不需要调用to_s(它将自动转换为字符串)。...

id: "switch-sm-#{calendar_entry.id}"