使用ajax在rails中保存数据

时间:2017-01-10 12:03:08

标签: jquery ruby-on-rails ruby ajax postgresql

enter image description here我是ruby on rails的新手。我正在尝试使用ajax post请求将数据添加到数据库。但我无法这样做。那么,任何人都可以帮我将数据添加到PostgreSQL数据库。



<script>
    $(document).ready(function () {
        $('#submit-button').click(function() {
            $.ajax({
                url: "http://localhost:3000/batches",
                data: JSON.stringify({
                            name: $("#name").val(),
                            course_id: $("#course_id").val(),
                            start_date: $("#start_date").val(),
                            end_date: $("#end_date").val(),
                            status: $("#batch_status").val(),
                        }
                ),
                error: function(error) {
                	console.log(error);
                },
                success: function(data) {
                    console.log(data);
                },
                type: 'POST'
            });
        });
    })
</script>
&#13;
&#13;
&#13;

我的控制器代码是:

def new
    @batch = Batch.new
    respond_to do |format|
      format.html
      format.json
      end
  end

  def create
    @batch = Batch.new(batch_param)
    respond_to do |format|
       if @batch.save
        format.html { redirect_to @batch, notice: "Save process completed!" }
        format.json { render json: @batch, status: :created, location: @batch }
       else
          format.html {
            flash.now[:notice]="Save proccess coudn't be completed!"
            render :new
          }
          format.json { render json: @batch.errors, status: :unprocessable_entity}
      end
    end
  end
def batch_param
      params.require(:batch).permit(:name, :course_id, :start_date, :end_date, :status)
    end

还让我知道我在这里做错了什么。或者我是否还必须添加额外的代码以便更好地操作。应对此操作的路线和模型进行哪些更改?

这些是我一直在犯的错误......

enter image description here

2 个答案:

答案 0 :(得分:0)

您需要在帖子

中提供batch param哈希值
data: JSON.stringify({
    batch: {
        name: $("#name").val(),
        course_id: $("#course_id").val(),
        start_date: $("#start_date").val(),
        end_date: $("#end_date").val(),
        status: $("#batch_status").val(),
     }
}),

因为这是batch_param要求的

另外,您要发布为JSON,因此您应该发布json数据,而不是字符串数据

因此,请将以上内容替换为以下内容:

data: {
    batch: {
        name: $("#name").val(),
        course_id: $("#course_id").val(),
        start_date: $("#start_date").val(),
        end_date: $("#end_date").val(),
        status: $("#batch_status").val(),
    }
},
dataType: "JSON",

这将为帖子添加足够的标题,RAILS将知道这是JSON,响应也将被解析为JSON。

答案 1 :(得分:0)

试试这个:

$.ajax({
  type: "POST",
  url: "http://localhost:3000/batches",
  data: {     
    batch: {
      name: $("#name").val(),
      course_id: $("#course_id").val(),
      start_date: $("#start_date").val(),
      end_date: $("#end_date").val(),
      status: $("#batch_status").val(),
      } 
    },
  error: function(error) {
            console.log(error);
            return false;
          },
  success: function(data) {
             console.log(data);
             return false;
          },
})