Rails充当可投影的Ajax问题

时间:2015-03-09 17:20:45

标签: ruby-on-rails ajax

我有Acts As Votable gem在我正在开发的社交应用程序中工作,我试图通过ajax使其工作,因此页面不刷新,导致读者失去他们的位置。

如果我刷新页面,则投票结束但我收到以下错误,我不明白它的含义,或者如何解决它:

Template is missing

Missing template posts/upvote, application/upvote with {:locale=>[:en], :formats=>[:js, "application/ecmascript", "application/x-ecmascript", :html, :text, :js, :css, :ics, :csv, :vcf, :png, :jpeg, :gif, :bmp, :tiff, :mpeg, :xml, :rss, :atom, :yaml, :multipart_form, :url_encoded_form, :json, :pdf, :zip], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. 

在我的帖子控制器中:

def upvote
    @post = Post.find(params[:id])
    @post.liked_by current_user
end 

我的观点:

<%= link_to like_post_path(post), class: "like", method: :put, :remote => true do %>
   <button type="button" class="btn btn-primary btn-sm" aria-label="Left Align">
    <i class="fa fa-heart"></i> Mark Voted For
    | <%= post.get_upvotes.size %>
   </button>
<% end %>

在我的视图底部(暂时):

<script>
$('.like')
 .on('ajax:send', function () { $(this).addClass('loading'); })
 .on('ajax:complete', function () { $(this).removeClass('loading'); })
 .on('ajax:error', function () { $(this).after('<div class="error">There was an issue.</div>'); })
 .on('ajax:success', function (data) { $(this).html(data.count); });
</script>

我的路线:

resources :posts, only: [:create, :edit, :update, :destroy] do
   member do
     put 'like' => 'posts#upvote' 
   end
end

感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:1)

rails中的每个控制器操作都应该重定向或呈现某些内容。如果您没有明确执行其中任何一项,则rails会尝试呈现与控制器和操作名称匹配的模板,在本例中为app/views/posts/upvote.format

如果您不想渲染任何东西(现在看起来像是这样),请将render nothing: true添加到upvote方法的末尾。否则,您通常会使用app/views/posts/upvote.js模板进行渲染,以便使用新的投票总数更新您的视图。

答案 1 :(得分:0)

您可以根据邮件错误提示创建posts/upvote.js.erb