Искаженный HTML при рендеринге частичного с UJS - PullRequest
0 голосов
/ 02 марта 2012

У меня есть вызов ajax на странице, который создает объект Goal в контроллере, а затем создает _create.js.erb:

$("form#edit_goal_<%= @last_goal.id%>").after('<%= escape_javascript(render(:partial => "show_new_goal", :locals => {:g => @goal, :user => @goal.user, :can_admin_athlete => true})).html_safe %>');

вот частичный _show_new_goal.html.erb:

<%= form_for( g, :url => user_goal_path(user, g), :method => :put, :remote => true) do |f| %>
  <div id="row_<%=g.id%>"><%= f.check_box(:is_complete)%>&nbsp;<%= g.name%></div>
<% end %>

HTML-код, отображаемый в этом фрагменте, не работает:

(note the closing div> and form> tags that should be </div> and </form>):

<form accept-charset=UTF-8 action=/users/1/goals/11 class=edit_goal data-remote=true id=edit_goal_11 method=post>
  <div style=margin:0;padding:0;display:inline>
    <input name=utf8 type=hidden value=&#x2713; />
    <input name=_method type=hidden value=put />
    <input name=authenticity_token type=hidden value=blahblah />
  div>
  <div id=row_11>
    <input name=goal[is_complete] type=hidden value=0 />
    <input id=goal_is_complete name=goal[is_complete] type=checkbox value=1 />
    &nbsp;Goal name
  div>
form>

Редактировать 1 Когда я не использую частичное для включения частичного _show_new_goal.html.erb для визуализации формы, возвращается правильно сформированный HTML. И.Е. это возвращает правильно сформированный HTML:

$("form#edit_goal_<%= @last_goal.id%>").after('<%= form_for( @goal, :url => user_goal_path(@goal.user, @goal), :method => :put, :remote => true) do |f| %><div id="row_<%=@goal.id%>"><%= f.check_box(:is_complete)%>&nbsp;<%= @goal.name%></div><% end %>');

HTML вернул:

<form accept-charset="UTF-8" action="/users/1/goals/3" class="edit_goal" data-remote="true" id="edit_goal_3" method="post">
  <div style="margin:0;padding:0;display:inline">
    <input name="utf8" type="hidden" value="&#x2713;" />
    <input name="_method" type="hidden" value="put" />
    <input name="authenticity_token" type="hidden" value="blahblah" />
  </div>
  <div id="row_3">
    <input name="goal[is_complete]" type="hidden" value="0" />
    <input id="goal_is_complete" name="goal[is_complete]" type="checkbox" value="1" />&nbsp;My goal
  </div>
</form>
...