【发布时间】:2015-01-17 00:14:38
【问题描述】:
在我的应用程序中有一个您可以投票的项目列表。我想通过 AJAX 调用来投票。
这是视图:
<ul class="list-groups">
<% @questions.each do |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' }) do |f| %>
<%= f.submit 'Up vote', class: "btn btn-default" %>
<%= f.hidden_field :id, :value => question.id %>
<% end %>
</li>
<% end %>
</ul>
这是实现它的方法:
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 do |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 already voted' } }
end
end
end
end
如果我不包含此 format.html { render '/home/index' } 我会收到此错误:
ActionController::UnknownFormat in VoteController#vote
但我不想再次渲染页面,我只是加载在使用 jQuery 和 ajax 操作后会更改的 html 片段。
我怎样才能只用 json 响应?
【问题讨论】:
-
在您的路线中:
route..., :defaults => { :format => :json }-- stackoverflow.com/a/24581010/358906
标签: ruby-on-rails ajax json ruby-on-rails-4