我有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
感谢您提供的任何帮助。
答案 0 :(得分:1)
rails中的每个控制器操作都应该重定向或呈现某些内容。如果您没有明确执行其中任何一项,则rails会尝试呈现与控制器和操作名称匹配的模板,在本例中为app/views/posts/upvote.format
。
如果您不想渲染任何东西(现在看起来像是这样),请将render nothing: true
添加到upvote
方法的末尾。否则,您通常会使用app/views/posts/upvote.js
模板进行渲染,以便使用新的投票总数更新您的视图。
答案 1 :(得分:0)
您可以根据邮件错误提示创建posts/upvote.js.erb
。