AJAX POST请求上没有方法错误 [英] no method error rails on AJAX POST request

查看:140
本文介绍了AJAX POST请求上没有方法错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从fullcalendar到rails发出AJAX POST请求,但是我没有方法错误,而且由于参数似乎还不错,我也不知道为什么。如果我没有考虑事件:从ajax请求中发送出去,那么仅发送诸如data:{title:title,sender_id:senderId ..}之类的参数,那么我将得到相同的错误。我错过了什么?

I'm trying to do an AJAX POST request from fullcalendar to rails, but I get no method error and I don't know why as the parameters seem to be fine. If I leave out event: from the ajax req so sending over only the params like data: {title: title, sender_id: senderId..} then I get the same error. What did I miss?

Started POST "/users/1/events" for ::1 at 2015-12-17 14:33:12 -0800
14:33:12 puma.1       | Processing by EventsController#create as */*
14:33:12 puma.1       |   Parameters: {"event"=>{"title"=>"asdfasdfadsf", "start_at"=>"Fri, 18 Dec 2015 00:00:00 GMT", "end_at"=>"Sat, 19 Dec 2015 00:00:00 GMT", "sender_id"=>"1", "recipient_id"=>"2"}, "user_id"=>"1"}
14:33:12 puma.1       |   User Load (0.3ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1  ORDER BY "users"."id" ASC LIMIT 1  [["id", 1]]
14:33:12 puma.1       | Completed 500 Internal Server Error in 8ms (ActiveRecord: 0.3ms)
14:33:12 puma.1       | 
14:33:12 puma.1       | NoMethodError - undefined method `save' for nil:NilClass:

ajax req:

$.ajax({
   type: "POST",
   url: "/users/1/events",
   data: { event: {
         title: title,
         start_at: "" + new Date(start).toUTCString(),
         end_at: "" + new Date(end).toUTCString(),
         sender_id: 1,
         recipient_id: 2
         }}
   });

事件控制器:

def create
  respond_to do |format|
    if @event.save
      format.html { redirect_to @event, :notice => 'Event was successfully created.' }
      format.json { render :json => @event, :status => :created, :location => @event }
    else
      format.html { render :action => "new" }
      format.json { render :json => @event.errors, :status => :unprocessable_entity }
    end
  end
end


private

def event_params
  params[:start_at] = params[:start]
  params[:end_at] = params[:end]
  params[:recipient_id] = params[:recipientId]
  params[:sender_id] = params[:senderId]
  params[:all_day] = params[:allDay]
  params.require(:event).permit(:recipient_id, :sender_id, :title, :body, :start_at, :end_at, :all_day)
end

event.rb

def as_json(options = {})
    { id: self.id,
      recipientId: self.recipient_id,
      senderId: self.sender_id,
      title: self.title,
      body: self.body || "",
      start: start_at,
      :end => end_at,
      allDay: self.all_day,
      recurring: false, 
      url: Rails.application.routes.url_helpers.user_event_path(self.recipient_id, self.id)
    }
  end


推荐答案

您已经定义了 event_params 方法,但您没有在任何地方调用它。在顶部的 create 方法中(假设 @event 的类是 Event ),添加以下行

You've defined the event_params method but you're not calling it anywhere. In the create method, at the top, (assuming the class for @event is Event), add the line

@event = Event.new(event_params)

这篇关于AJAX POST请求上没有方法错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆