2015-03-09 3 views
0

У меня есть Acts As Votable gem, работающий в социальном приложении, которое я разрабатываю, и я пытаюсь заставить его работать через ajax, чтобы страница не обновлялась, что заставило читателя потерять свое место.Rails Acts As Votable Ajax Issue

Если я обновить страницу голос прошел через, но я получаю следующее сообщение об ошибке, и я не понимаю, что это значит, и как это исправить:

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 

Спасибо за любую помощь вы можете предложить.

ответ

1

Каждое действие контроллера в рельсах должно либо перенаправлять, либо визуализировать что-то. Если вы явно не делаете этого, рельсы пытаются отобразить шаблон, соответствующий именам контроллера и действий, в этом случае app/views/posts/upvote.format.

Если вы хотите визуализировать ничего (что похоже на то, что вы делаете прямо сейчас), добавьте render nothing: true в конец метода upvote. В противном случае у вас обычно будет шаблон app/views/posts/upvote.js, который будет обновлять ваше представление с общей суммой голосов.

+0

спасибо. Это имеет смысл. –

0

Вы можете создать posts/upvote.js.erb в качестве сообщения об ошибке.