Ruby on rails 主干模型.save()导致选项不过帐
我有一个“创建帐户”的观点,我正在着手研究。主干1.1.2(typescript)前端,Rails 4.2 beta 1 web服务后端 账户模式Ruby on rails 主干模型.save()导致选项不过帐,ruby-on-rails,backbone.js,typescript,backbone-model,Ruby On Rails,Backbone.js,Typescript,Backbone Model,我有一个“创建帐户”的观点,我正在着手研究。主干1.1.2(typescript)前端,Rails 4.2 beta 1 web服务后端 账户模式 export class Account extends Backbone.Model { public urlRoot: string; public validation:any; constructor(attributes?: any, options?: any){ this.urlRoot = '
export class Account extends Backbone.Model {
public urlRoot: string;
public validation:any;
constructor(attributes?: any, options?: any){
this.urlRoot = 'http://domain.fake/accounts';
this.validation = {
email: {
required: true,
pattern: 'email'
},
password: {
required: true,
minLength: 6
}
};
super(attributes, options);
}
}
创建帐户视图:
export class CreateAccountView extends Backbone.View {
public template: string;
public events: any;
public model: accountModelImport.Account;
constructor(options?: Backbone.ViewOptions){
this.el = '#modal';
this.template = createAccountViewTemplate;
this.model = new accountModelImport.Account();
this.events = {
'click #create-account-submit' : 'create'
};
super(options);
}
public render(): CreateAccountView {
this.$el.html(_.template(this.template));
Backbone.Validation.bind(this);
this.$el.modal('show');
return this;
}
public create(){
var email:string = $('#create-account-email').val(), password:string = $('#create-account-password').val(), passconf:string = $('#create-account-password-confirmation').val();
this.model.set({email: email, password: password, password_confirmation: passconf});
this.model.save(null, {success: this.success, error: this.error});
}
public success(){
alert('Success');
}
public error(){
alert('error');
}
}
ActionController::RoutingError (No route matches [OPTIONS] "/accounts"):
Rails在model.save()上的输出。
从上面开始:
export class CreateAccountView extends Backbone.View {
public template: string;
public events: any;
public model: accountModelImport.Account;
constructor(options?: Backbone.ViewOptions){
this.el = '#modal';
this.template = createAccountViewTemplate;
this.model = new accountModelImport.Account();
this.events = {
'click #create-account-submit' : 'create'
};
super(options);
}
public render(): CreateAccountView {
this.$el.html(_.template(this.template));
Backbone.Validation.bind(this);
this.$el.modal('show');
return this;
}
public create(){
var email:string = $('#create-account-email').val(), password:string = $('#create-account-password').val(), passconf:string = $('#create-account-password-confirmation').val();
this.model.set({email: email, password: password, password_confirmation: passconf});
this.model.save(null, {success: this.success, error: this.error});
}
public success(){
alert('Success');
}
public error(){
alert('error');
}
}
ActionController::RoutingError (No route matches [OPTIONS] "/accounts"):
我看到了许多关于将什么作为第一个参数传递给.save()
的问题,每次我都尝试了它们,结果都是一样的:null,false,{}
我尝试过搜索一个有相同问题的问题,但没有找到一个。在重写.sync()
方法之前,我想尝试让它在本机上工作
为什么.save()
试图使用选项
而不是发布
为什么.save()尝试使用选项而不是POST
不是。这是CORS的“飞行前请求”。如果选项请求成功,POST请求将随之出现
…飞行前请求是作为HTTP选项请求发出的(因此
确保您的服务器能够响应此方法)。它还包含
一些附加标题:
访问控制请求方法-实际请求的HTTP方法。
始终包含此请求头,即使HTTP方法是
前面定义的简单HTTP方法(GET、POST、HEAD)
访问控制请求标头-以逗号分隔的非简单
请求中包含的标题
飞行前请求是为实际飞行请求权限的一种方式
请求,然后再提出实际请求。服务器应该检查
上面的两个标头用于验证HTTP方法和
请求的标头有效且已接受
看
为什么.save()尝试使用选项而不是POST
不是。这是CORS的“飞行前请求”。如果选项请求成功,POST请求将随之出现
…飞行前请求是作为HTTP选项请求发出的(因此
确保您的服务器能够响应此方法)。它还包含
一些附加标题:
访问控制请求方法-实际请求的HTTP方法。
始终包含此请求头,即使HTTP方法是
前面定义的简单HTTP方法(GET、POST、HEAD)
访问控制请求标头-以逗号分隔的非简单
请求中包含的标题
飞行前请求是为实际飞行请求权限的一种方式
请求,然后再提出实际请求。服务器应该检查
上面的两个标头用于验证HTTP方法和
请求的标头有效且已接受
看
为什么.save()尝试使用选项而不是POST
不是。这是CORS的“飞行前请求”。如果选项请求成功,POST请求将随之出现
…飞行前请求是作为HTTP选项请求发出的(因此
确保您的服务器能够响应此方法)。它还包含
一些附加标题:
访问控制请求方法-实际请求的HTTP方法。
始终包含此请求头,即使HTTP方法是
前面定义的简单HTTP方法(GET、POST、HEAD)
访问控制请求标头-以逗号分隔的非简单
请求中包含的标题
飞行前请求是为实际飞行请求权限的一种方式
请求,然后再提出实际请求。服务器应该检查
上面的两个标头用于验证HTTP方法和
请求的标头有效且已接受
看
为什么.save()尝试使用选项而不是POST
不是。这是CORS的“飞行前请求”。如果选项请求成功,POST请求将随之出现
…飞行前请求是作为HTTP选项请求发出的(因此
确保您的服务器能够响应此方法)。它还包含
一些附加标题:
访问控制请求方法-实际请求的HTTP方法。
始终包含此请求头,即使HTTP方法是
前面定义的简单HTTP方法(GET、POST、HEAD)
访问控制请求标头-以逗号分隔的非简单
请求中包含的标题
飞行前请求是为实际飞行请求权限的一种方式
请求,然后再提出实际请求。服务器应该检查
上面的两个标头用于验证HTTP方法和
请求的标头有效且已接受
参见正如@meagar在回答这个问题时指出的,这并不是主干试图做的任何错事。这是CORS的问题。我使用
config.action\u dispatch.default\u headers.merge手动设置了标题但显然这还不够
更多的谷歌搜索为我提供了一个小小的宝石般的答案(得到它,'gem')。。。
这就是我的答案
安装gem并按照他们的说明进行配置后,POST
请求按预期进行
希望这对将来的其他人有所帮助,并且一定要赞扬@meagar帮助我走上了正确的道路。正如@meagar在回答这个问题时指出的那样,主干并没有试图做错事。这是CORS的问题。我使用config.action\u dispatch.default\u headers.merge手动设置了标题但显然这还不够
更多的谷歌搜索为我提供了一个小小的宝石般的答案(得到它,'gem')。。。
这就是我的答案
安装gem并按照他们的说明进行配置后,POST
请求按预期进行