【发布时间】:2014-10-06 09:00:58
【问题描述】:
我正在尝试使用 Backbone 1.1.2 和 Rails 4.2.beta1 创建一个用户帐户。
我在骨干中打电话:
public create(){
var email:string = $('#create-account-email').val(), password:string = $('#create-account-password').val(), passconf:string = $('#create-account-password-confirm').val();
this.model.set({email: email, password: password, password_confirmation: passconf});
this.model.save(null, {success: this.success, error: this.error});
}
使用以下请求参数在我的 web 服务中正确调用 rails create 方法:
{"email":"test@test.com","password":"123456","password_confirmation":"123456"}
它正在通过过滤方法
def account_params
#breakpoint
params.require(:account).permit(:password, :password_confirmation, :email)
end
但如果我在上述位置放置断点并检查 params 对象,我会得到:
{"email"=>"test@test.com",
"password"=>"123456",
"password_confirmation"=>"123456",
"controller"=>"accounts",
"action"=>"create",
"account"=>{"email"=>"test@test.com"},
"format"=>"json"}
乍一看,这对我来说是正确的。但是账号创建失败,因为密码是nil
如果检查account_params 的结果,我只会得到:
{"email" => "test@test.com")
为什么密码不包含在帐户参数对象中。我正在使用所有带有rails的默认支架代码和Backbone的默认配置。
【问题讨论】:
-
您可以张贴您的表格吗?
-
@Mandeep 我为你编辑了上面的代码。这是一个表格,但我正在使用
$().val()从表格中读取它,所以我为您提供了该代码。 -
啊好吧,你如何将这些参数发送到服务器?查看您的参数哈希,它们似乎没有正确嵌套
-
@Mandeep 我目前只是让骨干做这件事。我是否需要修改主干发送参数的方式。我的理解是骨干网 + rails 只是工作
-
不,它们不能开箱即用地一起工作。 Backbone 想发送
{p1:v1, p2:v2},但Rails 想看到{model_name: {p1:v1, p2:v2}}。有一些宝石可以帮助将事物粘合在一起,或者您可以自行整理sync覆盖。搜索“backbone-rails”。
标签: ruby-on-rails backbone.js typescript backbone-model ruby-on-rails-4.2