在具有简单形式的属性 erb 中进行插值 (Rails)

Interpolation in an attribute erb with simple form (Rails)

我在 Rails 上与 Ruby 合作,我有一个简单的形式 gem 是这样的:

Code problem

<%= 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属性[=32=中的插值 ], 由于某种原因我没有得到变量的数据,但是,我可以这样做:

Bad code by standards

<%= 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 %> 

是的,第二个代码有效,但我想通过第一个选项,通过 interpolation,所以我的问题是:

为什么我没有在 "code problem" 中获取带插值的数据?

进行字符串插值时需要使用双引号,不需要调用to_s(会自动转为字符串)....

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