0

ビデオを特集するために2つのbutton_to呼び出しがあります。このボタンは、ビデオコントローラーの注目のアクションを呼び出します。

私のコントローラーで

def featured
 video = Video.find(params[:id]) 
 video.nfeatured = params[:nfeatured]
 video.save
respond_to do |format|
  format.html { redirect_to :back }
  format.js
 end
end

私からしてみれば

<td class="featured">
<% if video.nfeatured == false %>
<%= button_to 'Feature', featured_network_video_path(network, video, 
:nfeatured => true), :remote => true, :class => :feature %>

 <% else %>
 <%= button_to 'Remove', featured_network_video_path(network, video,
 :nfeatured => false), :remote => true, :class => :unfeature  %>
<% end %>
</td>

ajaxの投稿が成功した後、ボタンを「削除」に変更する最も邪魔にならない方法は何ですか?他のすべては正しく機能しています。features.js.erbファイルでjQueryトグル呼び出しを実行しようとしましたが、機能しませんでした。

4

1 に答える 1

1

私はそうするのが好きです:

<td class="featured">
<%= render :template => "videos/featured" %>
</td>

Featured.html.erb:

<% if @video.nfeatured == false %>
  <%= button_to 'Feature', featured_network_video_path(@network, @video, 
  :nfeatured => true), :remote => true, :class => :feature %>

<% else %>
  <%= button_to 'Remove', featured_network_video_path(@network, @video,
  :nfeatured => false), :remote => true, :class => :unfeature  %>
<% end %>

注目の.js.erb

$(".featured").html("<%= j(render :template => "videos/featured", :handlers => [:erb]) %>");

はい、これは最善の方法ではないと思います。より適切な解決策が見たいです。

編集: ループの場合、このソリューションは適切ではありません。2 番目のバージョン:

<% unless video.nfeatured %>
  <%= button_to 'Feature', featured_network_video_path(network, video, 
  :nfeatured => true), :remote => true, :class => :feature %>
  <%= button_to 'Remove', featured_network_video_path(network, video,
  :nfeatured => false), :remote => true, :class => 'unfeature hidden'  %>
<% else %>
  <%= button_to 'Feature', featured_network_video_path(network, video, 
  :nfeatured => true), :remote => true, :class => 'feature hidden' %>
  <%= button_to 'Remove', featured_network_video_path(network, video,
  :nfeatured => false), :remote => true, :class => :unfeature  %>
<% end %>

いくつかのコーヒーファイルで:

$('.featured').bind "ajax:success", ->
  $(this).toggle()
  $(this).closest('a').toggle()

このコードについてはよくわかりませんが (明らかにリファクタリングが必要です)、理解していただければ幸いです。

于 2012-05-20T18:50:17.813 に答える