我正在尝试从行动书中的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])