处理ajax抱怨没有模板的Rails方法?

时间:2011-11-19 19:32:48

标签: ruby-on-rails ruby-on-rails-3.1

我有一个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

2 个答案:

答案 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,这将阻止布局