ajax - Rails: return only json -


in app there list of items can upvote. want make these votes ajax calls.

this view:

<ul class="list-groups"> <% @questions.each |question| %>     <li class="list-group-item">     <%= link_to question.description, question_path(question) %>     <%= form_for(question, :url => url_for(:controller => 'vote', :action => 'vote'), method: :post, html: { class: 'form-inline' }) |f| %>       <%= f.submit 'up vote', class: "btn btn-default" %>       <%= f.hidden_field :id, :value => question.id %>     <% end %>   </li> <% end %> </ul> 

and method it:

class votecontroller < applicationcontroller respond_to :json      def vote         question_id = params[:question][:id]         user_id = current_user.id         vote = vote.where(["question_id = :q", { q: question_id }]).where(["user_id = :u", { u: user_id }])         respond_to |format|             if vote.nil?                 @vote = vote.new                 @vote.question_id = question_id                 @vote.user_id = user_id                 @vote.save                 format.html { render '/home/index' }                 format.json { render :json => { :status => 'ok' } }             else                 format.html { render '/home/index' }                 format.json { render :json => { :status => 'failed', :msg => 'you voted' } }             end         end     end end 

if don't include format.html { render '/home/index' } getting error:

actioncontroller::unknownformat in votecontroller#vote 

but don't want render page again, loading pieces of html change after action jquery , ajax.

how can respond json?

use respond_with instead of respond_to in controller action.

respond_with |format| 

respond_to @ top of controller designed work respond_with in controller action, whereas respond_to in controller action ignores respond_to you've defined @ top of controller.

also make sure making remote call, instead of normall 1 if want request go through ajax.

<%= form_for(question, :url => url_for(:controller => 'vote', :action => 'vote'), method: :post, remote: true, html: { class: 'form-inline' }) |f| %> 

note remote: true part added argument form_for helper.


Comments

Popular posts from this blog

java - Oracle EBS .ClassNotFoundException: oracle.apps.fnd.formsClient.FormsLauncher.class ERROR -

c# - how to use buttonedit in devexpress gridcontrol -

nvd3.js - angularjs-nvd3-directives setting color in legend as well as in chart elements -