运行中的轨道4的轨道4.1和rspec



我正在尝试从行动书中的rails 4学习rails 4.1,我已经到了第13章,在本章中定义了API for JSON and XML

它定义了这样一个控制器:

class Api::V1::ProjectsController < Api::V1::BaseController  
  def index  
     respond_with(Project.for(current_user).all)  
  end  
  def create  
    project = Project.new project_params  
    if project.save  
      respond_with(project, :location => api_v1_project_path(project))  
    else  
      respond_with(errors: project.errors.messages)  
    end  
  end  
  private  
  def project_params  
    params.require(:project).permit(:name)  
  end  
end  

还有一个类似这样的rsspec测试:

it "unsuccessful JSON" do  
  post "#{url}.json", :token => token, :project => {}  
  expect(last_response.status).to eql(422)  
  errors = {"errors" => { "name" => ["can't be blank"]}}.to_json  
  expect(last_response.body).to eql(errors)  
end  

当我运行测试时,我得到以下结果:

ActionController::ParameterMission:param丢失或值为空:项目

我知道,这是因为强大的参数。

我解决了这样的问题,但有人有更好的想法吗?

def project_params  
  if params[:project].nil?  
    params[:project] = {:name => ''}  
  end  
  params.require(:project).permit(:name)  
end  

在我的案例中,它已经解决了这个问题

params.require(:project).permit(:name, :description) if params[:project]

您可以允许在github中的强参数中解释嵌套参数。在你的情况下,这可能就是你想要的:

params.permit(:project => [:name, :description])

相关内容

  • 没有找到相关文章

最新更新