moo*_*e56 4 backbone.js ruby-on-rails-3
我有一个项目对象的Backbone.js集合和模型:
window.Project = Backbone.Model.extend();
window.Projects = Backbone.Collection.extend({
model: Project,
url: '/projects'
});
Run Code Online (Sandbox Code Playgroud)
我已经设置了一个rails控制器来响应Backbone.js集合:
class ProjectsController < ApplicationController
def index
render :json => Project.all
end
def create
project = Project.create! params
render :json => project
end
end
Run Code Online (Sandbox Code Playgroud)
索引工作正常,我在我的网络应用程序中获得了一个项目列表.问题是如果我尝试在Projects集合上创建模型,我从服务器得到500错误.
服务器上的错误消息如下:
Started POST "/projects" for 127.0.0.1 at 2011-08-21 08:27:56 +0100
Processing by ProjectsController#create as JSON
Parameters: {"title"=>"another test"}
Completed 500 Internal Server Error in 16ms
ActiveRecord::UnknownAttributeError (unknown attribute: action):
app/controllers/projects_controller.rb:8:in `create'
Run Code Online (Sandbox Code Playgroud)
我不确定这unknown attribute: action
是指什么.
有关信息,我已设置projects_controller
as resources :projects
.我也设置了rails ActiveRecord::Base.include_root_in_json = false
.
是的,Rails的总是添加action
和controller
到params
.参数来自ActionDispatch :: Http :: Parameters:
def parameters
@env["action_dispatch.request.parameters"] ||= begin
params = request_parameters.merge(query_parameters)
params.merge!(path_parameters)
encode_params(params).with_indifferent_access
end
end
Run Code Online (Sandbox Code Playgroud)
返回带有用于形成请求路径的参数的哈希.返回的哈希键是字符串:
Run Code Online (Sandbox Code Playgroud){'action' => 'my_action', 'controller' => 'my_controller'}
所以你不应该这样做project = Project.create! params
.你可以去update_attributes
路线:
project = Project.new
project.update_attributes params[:model_name]
Run Code Online (Sandbox Code Playgroud)
但是这假设您在子哈希中拥有所需的内容,params
并且它不会调用您的验证器.Backbone默认情况下不会命名属性,但您可以自行覆盖Backbone.sync
并自行完成.尽管如此,您可能仍希望进行验证,因此update_attributes
通常应避免使用.
你最好的选择是准确地提取params
你期望在那里的属性.这甚至是Backbone推荐的做法:
*(在实际代码中,永远不要盲目使用update_attributes,并始终将允许更改的属性列入白名单.)*
归档时间: |
|
查看次数: |
1588 次 |
最近记录: |