我在我的show-method視圖中有一個鏈接。此鏈接應在後臺運行此模型的創建方法,並且如果完成,則應該更改此視圖中的樣式和鏈接。 我不能管理它從另一種方法更改按鈕。Ruby on Rails - 通過jQuery/Ajax呈現另一個視圖中的局部視圖
查看:
<%= div_for @movie do %>
<p class="p p-details">
<div class="default_list">
<span class="label label-info">
<%= link_to "Add to Movie List", movies_path(:add_to_list => "default_list", :mashupdb_id => @movie.mashupdb_id),:method => "post", :remote => true, :class =>"a a-label" %>
</span>
</div>
</p>
<% end %>
控制器創建操作:
respond_to do |format|
format.html do
if request.xhr?
render :partial => "movies/delete_from_default_list", :layout => "movies/show", :status => :created
end
end
format.json { render :json => @movie }
end
的jQuery:
jQuery(function($) {
// Callback for rendering via HTML
$('.movie a[data-type=html]').on('ajax:success', function(event, data, status, xhr) {
$(this).parents('div.movie').find('.label-info').replaceWith(data);
});
});
如果我試試這個,沒有發生。
它的作品,如果我使用下面的鏈接和我的show-action只。
<span class="label label-info">
<%= link_to "Add to Movie List", @movies, :remote => true, :class =>"a a-label" %>
</span>
可以從另一個控制器渲染一個局部?我還能做什麼?
編輯:
現在我試圖改變一個js.erb文件的鏈接。
更改的控制器:
respond_to do |format|
format.html
format.js { render :content_type => 'text/javascript' }
format.json { render :json => @movie }
end
create.js.erb:
if ('<%= @list_operation.eql?('add_to_list_default_list') %>'){
$('#<%= dom_id(@movie) %> .default_list').html('<%= raw escape_javascript(render ("movies/delete_from_default_list"))%>');
}
else if ('<%= @list_operation.eql?('delete_from_list_default_list') %>'){
$('#<%= dom_id(@movie) %> .default_list').html('<%= raw escape_javascript(render ("movies/add_to_default_list"))%>');
}
局部_delete_from_default_list.html.erb
<span class="label label-important">
<%= link_to "Delete from Movie List", movies_path(:delete_from_list => "default_list", :mashupdb_id => @movie.mashupdb_id),:method => "post", :remote => true, :class =>"a a-label" %>
</span>
局部_add_to_default_list.html.erb
<span class="label label-info">
<%= link_to "Add to Movie List", movies_path(:add_to_list => "default_list", :mashupdb_id => @movie.mashupdb_id),:method => "post", :remote => true, :class =>"a a-label" %>
</span>
如果我點擊首次鏈接時,JS,ERB文件執行,在我看來,內容改變。(@ list_operation包含「add_to_list_default_list」)
如果我現在點擊更改的鏈接,控制器動作也稱爲成功(@list_operation包含「delete_from_list_default_list」),但沒有任何反應。
更多細節,請做這些調用除了替換視圖中的東西嗎?如保存或刪除記錄?如果不是的話,你應該爲這個與crud方法分開的另一個方法,也不需要使它們成爲POST方法。會建議有不同的添加和刪除方法。 – Saifis