Ruby on rails 轨道4.1从运行中的轨道4和rspec
我试图从《行动手册》中的Ruby on rails 轨道4.1从运行中的轨道4和rspec,ruby-on-rails,rspec,strong-parameters,Ruby On Rails,Rspec,Strong Parameters,我试图从《行动手册》中的rails4学习rails4.1,我已经学习了第13章,在这一章中定义了JSON和XML的API 它定义了如下控制器: class Api::V1::ProjectsController < Api::V1::BaseController def index respond_with(Project.for(current_user).all) end def create project = Project.new
rails4
学习rails4.1
,我已经学习了第13章,在这一章中定义了JSON和XML的API
它定义了如下控制器:
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
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::ParameterMissing:缺少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]
可以允许嵌套参数,如中所述。 在您的情况下,这可能是您想要的:
params.permit(:project => [:name, :description])