使用AJAX POST从javascript到带有Strong参数的Rails4控制器

Using AJAX POST from javascript to Rails 4 controller with Strong parameter

本文关键字:参数 Strong Rails4 控制器 POST AJAX javascript 使用      更新时间:2023-09-26

我是Rails 的新手

我的目的是将通过AJAX POST从Javascript接收到的song_idtitle插入数据库(MySQL)


在我的javascript文件中

var song_id = "23f4";
var title = "test";
$( document ).ready( function() {
jQuery.ajax({
      url: 'create',
      data: "song_id=" + song_id + "&title=" + title,
      type: "POST",
      success: function(data) {
        alert("Successful");
      },
      failure: function() {
        alert("Unsuccessful");
      }
    }); 
} );


在我的editor_controller.rb 中

class EditorController < ApplicationController
  def new
    @song = Song.new
  end
  def create
    logger.debug("#{params[:song_id]}")
    logger.debug("#{params[:title]}")
    @song = Song.new(song_params)
    if @song.save
      redirect_to root_path
    else
      flash[:notice_song_failed] = true
      redirect_to root_path
    end 
  end
  private   
  def song_params
    params.require(:song).permit(:song_id, :title)
  end


问题是,当我用这段代码运行Rails应用程序时,控制台注意到

ActionController::ParameterMissing at/editor/create

param丢失或值为空:song


我正在尝试使用

private 
def song_params
  params.require(:song).permit(params[:song_id], params[:title])
end

但它不起作用,并注意到我一样,而且在下面的终端日志中告诉我

已于2015-04-01 01:07:23+0700 为:1启动POST"/editor/create"

EditorController处理#创建为/

参数:{"song_id"=>"23f4","title"=>"test"}

23f4

测试

在1ms 中完成400个错误请求


我的代码中遗漏了什么吗,谢谢Advance。

您根本没有发送歌曲参数。看起来您需要更新jQuery.ajax调用中的数据行,以包含歌曲参数,如下所示:

data: {song: {song_id: song_id, title: title}}

这:

params.require(:song).permit(params[:song_id], params[:title])

正在说"需要‘song’参数,并允许‘song_id’和‘title’通过。如果你不传递song参数,你会收到一个错误的请求。

您可以:

  1. 更改该行代码以删除对"歌曲"的要求

  1. 就像@infilted所说的,更改ajax调用以发送一个song JSON对象