Rails アプリで replaceWith/html jQuery 関数を動作させようとしています。
私の review_main.html.erb には、次の DOM 構造があります。
<div class="left_window"></div>
<div class="right_window"></div>
私の edit.html.erb には次のものがあります。
<div class="edit_review_form">
<div class="cancel-edit" id="<%= @review.id %>"></div>
<div class="inputs"></div>
</div>
アプリが読み込まれると、review_main.html.erb は次のように呼び出されます。
<!-- I need the 'breadcrumb div' to be outside of review_main, because it will help with my jQuery html/replaceWith -->
<div class="breadcrumb" id="review_<%= review.id %>">
<%= render 'reviews/review_main', :review => review %>
</div>
したがって、読み込まれた DOM は次のようになります。
<div class="breadcrumb" id="review_<%= review.id %>">
<div class="left_window"></div>
<div class="right_window"></div>
</div>
次のように、review_main.html.erb から edit.js.erb を呼び出します。
<div class = "right_window">
<%= link_to I18n.t('user.review.edit.edit'), edit_review_path(review), :remote => true, :class => "edit_review_link" %>
<% end %>
</div>
edit.js.erb ファイルには次のものがあります。
$('#review_<%=@review.id%>').html("<%= escape_javascript(render 'edit') %>")
$('#review_<%=@review.id %>').animate({height:'250px'}, 300);
ここまではすべてうまくいきます。DOM 構造は次のように変更されます。
<div class="breadcrumb" id="review_<%= review.id %>">
<div class="edit_review_form">
<div class="cancel-edit" id="<%= @review.id %>"></div>
<div class="inputs"></div>
</div>
</div>
問題は、DOM を次のように変更することです。
<div class="breadcrumb" id="review_<%= review.id %>">
<div class="left_window"></div>
<div class="right_window"></div>
</div>
私の _edit.html.erb には、_review_main.html.erb をもう一度ロードするはずの「キャンセル」リンクがあります。
キャンセルは次のように呼び出されます。
<%= link_to I18n.t('user.review.edit.cancel'), review_path(@review), :remote => true %>
show.js.erb ファイルには次のものがあります。
$('#review_<%=@review.id%>').html("<%= escape_javascript( render 'review_main' ) %>")
しかし、新しい情報はレンダリングされません。review_main には何も認識されません。コンソールでは、次のことがわかります。
GET http://localhost:3000/reviews/51 500 (Internal Server Error)
and
NameError in Reviews#show
Showing /home/mycompaq/myapp/app/views/reviews/_review_main.html.erb where line #8 raised:
undefined local variable or method `review' for #<#<Class:0x7f2fe74a6c08>:0x7f2fe76ca048>
Extracted source (around line #8):
review_main.html.erb が最初に読み込まれるときにエラーが発生しないので、なぜ今起こっているのか混乱しています。助けてくれてありがとう。