我有一个subscriber#create
方法,仅用于ajax提交给它(html表单使用data-remote="true"
来执行Ajax。表单确实提交,数据最终在数据库中但是该方法抛出一个错误,说明找不到模板。
如何在Rails中将函数指定为Ajax处理程序? - 不必渲染模板等的函数。
以下是该方法的样子:
class SubscribersController < ApplicationController
def create
Subscriber.create(:email => params[:email],
:ip_address => request.remote_ip,
:referring_page => request.referer ) unless Subscriber.find_by_email(params[:email])
end
end
答案 0 :(得分:1)
你应该正确处理你的respond_to中的电话。
...
respond_to do |format|
format.html
format.js { :nothing => true }
end
事情就是这样,你应该回归某事。即使它是一个AJAX调用,你也应该发回一些东西让调用者知道创建是成功的。
def create
@subscriber = Subscriber.new(#your params)
respond_to do |format|
if @subscriber.save
format.js { render :json => @subscriber, :status => :created, :location => @susbscriber }
else
format.js { render :json => @susbcriber.errors, :status => :unprocessable_entity }
end
end
end
此外,您不必在控制器中执行unless Subscriber.find_by_email(params[:email])
。您只需将validates_uniqueness_of :email
添加到订阅者模型。
答案 1 :(得分:0)
你想在你的控制器中使用render :layout => !request.xhr?
这样的东西,如果请求是ajax,这将阻止布局