2014-12-06 78 views
0

我正在尝试构建一个基于Rails的API供一个应用程序使用。我的工作项目的创建,以及我遇到一些问题,具有很强的参数:一个API的Rails强参数

class ProjectsController < ApplicationController 
    def create 
    respond_with current_user.projects.create project_params 
    end 

private 
    def project_params 
    params.require(:project).permit(:name) 
    end 
end 

所以在这里我有一个控制器,它应该接受一个参数与项目对象和其他细节嵌入式在项目对象中。

这个分崩离析的时候我提出一个空的形式,提交为{"project" => {}}.,会抛出

ActionController::ParameterMissing Exception: param is missing or the value is empty 

我认为需要最高级别的参数被认为是地道的,但似乎烬的方式取出空参数从在这种情况下,有效载荷将导致问题。这应如何处理?

回答

0

这里的问题是我有余烬控制器设置是这样的:

New = Ember.Controller.extend 
    actions: 
    createProject: -> 
     @store.createRecord 'project', 
     name: @get('name') 

这似乎是正常,但是当名称,格式为模板未填写,这将是不确定的,止跌不会被发送。我可以通过添加以下内容来修复它:

New = Ember.Controller.extend 
    name: null 
    # rest the same 
+0

这是因为'Ember.Controller'不是代理,如果你使用'Ember.ObjectController'我不相信会发生这种情况。 – 2014-12-08 17:27:31

+0

Fwiw你应该尝试在这里使用一个组件而不是控制器。 – 2014-12-08 17:27:47

+0

我为什么要使用组件? – DVG 2014-12-08 20:10:06

0

使用Ember与Rails最简单的方法是在您的Ember代码中使用Ember Data的ActiveModelAdapter/ActiveModelSerializer,在您的Rails代码中使用active_model_serializers

Ember链接顶部有一些注释,它们描述了a_m_s期望的设置。

+0

我正在做所有这些事情。 – DVG 2014-12-07 00:56:24

+0

有没有非空的参数? – 2014-12-07 03:41:13

+0

这个问题最终导致我没有在控制器中为每个参数定义一个null属性,如果你没有这样做,它们就会显示出来,它们是未定义的,除非你在表单中填写内容,否则不会被发送方 – DVG 2014-12-07 13:14:05