Rails 4.2:在Ajax响应中呈现collection_check_boxes导致非html_safe内容

时间:2016-05-08 04:21:01

标签: ruby-on-rails ajax ruby-on-rails-4.2

我正在使用Rails 4.2。我有一个“新项目”页面,其中有一个表单来创建一个新项目。页面上还有第二个表单,允许用户通过Ajax将用户添加到项目中。 Ajax正在运行,但我遇到了正确呈现响应的问题。

“新项目”表单将可用用户显示为由此代码段创建的复选框列表:

<div id="disclosed_users_check_box_list">
  <%= f.collection_check_boxes :disclosed_user_ids, User.order(:first_name, :last_name), :id, :name_with_job_title do |b| %>
    <%= b.check_box %> <%= b.label %><br>
  <% end %>
</div>

“新用户”表单使用Ajax创建新用户,然后使用此JS响应:

$("#disclosed_users_check_box_list").html("<%= escape_javascript(collection_check_boxes(:project, :disclosed_user_ids, User.order(:first_name, :last_name), :id, :name_with_job_title) { |b| "#{b.check_box} #{b.label}<br>" }).html_safe %>");

我遇到的问题是最后的.html_safe似乎没有做任何事情。呈现响应时,我看到原始HTML出现在“新项目”页面上,而不是实际的复选框和标签。

关于我哪里出错的任何想法?

1 个答案:

答案 0 :(得分:0)

终于解决了!我把.html_safe放在了错误的地方。这是有用的:

$("#disclosed_users_check_box_list").html("<%= j(collection_check_boxes(:project, :disclosed_user_ids, User.order(:first_name, :last_name), :id, :name_with_job_title){ |b| "#{b.check_box} #{b.label}<br>".html_safe }) %>");