respond_to format.html参数太少

时间:2017-01-22 23:07:20

标签: ruby-on-rails

在添加参考书目表单中,我创建了一个添加作者表单,使用json添加作者。

这很好用。

但是,当作者被添加到数据库时,我想显示成功消息。

这是我的代码:

def create
    @auteur = Auteur.new(params_auteur)
    respond_to do |q|
        if @auteur.save
            format.html{ redirect_to @auteur, notice: 'Auteur added successfully.'}
            format.js{}
            format.json{
                render json: @auteur, status: :created, location: @auteur
            }
        else
            format.html{ render action: "new"}
            format.json{ render json: @auteur.errors, status: :unprocessable_entity}
        end
    end
end

然后我添加了一个包含此代码的文件views/auteurs/create.js.erb

$("<%= escape_javascript(render @auteur) %>").appendTo(".bloque_ajoute_auteur"); 

我收到的错误消息是在新作者(成功)插入数据库后立即生成的:

Completed 500 Internal Server Error in 10ms (ActiveRecord: 1.6ms)
ArgumentError (too few arguments):
app/controllers/administration/auteurs_controller.rb:23:in `format'
app/controllers/administration/auteurs_controller.rb:23:in `block in create'
app/controllers/administration/auteurs_controller.rb:21:in `create'

第21行是respond_to块的开头;第23行是format.html{ redirect_to @auteur, notice: 'Auteur ajouté.'}

我以为我非常密切关注这个:http://guides.rubyonrails.org/working_with_javascript_in_rails.html#server-side-concerns

2 个答案:

答案 0 :(得分:3)

应该是respond_to do |format|。一旦它在没有声明的情况下到达format的第一个实例,它就会失败。

答案 1 :(得分:1)

您的代码最终调用内核的format instance method,而不是使用传递给respond_to块的参数,这应该是应该发生的。

这种方法需要更多的参数,在这种情况下显然没有提供。

要解决此问题,请将参数名称从q更改为format