Ruby - 无法将JSON参数传递给我的控制器

时间:2013-12-31 14:58:11

标签: ruby-on-rails ruby json

嗨,谢谢你抽出时间回答我的问题!

我的api / ProjectController中有以下代码:

class Api::ProjectsController < ApplicationController
  respond_to :json

  def index
    respond_with Project.all
  end

  def show
    respond_with Project.find(params[:id])
  end

  def create
    @project = Project.new(project_params)

    if @project.save
      redirect_to @project
    else
      render 'new'
    end
  end
end

我一直收到以下错误:

undefined local variable or method `project_params' for #<Api::ProjectsController:0x00003d6d80b448>

当我将create方法中的第二行更改为:

@project = Project.new(params[:project])

我收到以下错误:

ActiveModel::ForbiddenAttributesError

我正在使用ember并从前端发送Project对象的JSON表示。在这两个实例中,这是传播到控制器的json:

{"project"=>{"name"=>"asdfsdfsdf"}}

有人可以找出错误的地方吗...我觉得我在这方面花的时间比我真的要多......:/

非常感谢你,新年快乐!!

2 个答案:

答案 0 :(得分:2)

您必须定义您尝试使用的project_params方法:

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

您可以在Rails 4 Strong parameters上找到更多信息和示例。

答案 1 :(得分:1)

看起来您没有在Api :: ProjectsController类中定义project_params方法。您需要向名为project_params的Api :: ProjectsController添加一个方法,如:

def project_params
  params.require(:project).permit(:attribute)
end

只需将:attribute符号替换为表单中相应字段的实际属性即可。因此,如果您的项目有'name'和'start_date'字段,那么您的需求将显示为params.require(:project).permit(:name, :start_date)