【发布时间】:2018-04-20 05:29:24
【问题描述】:
当我在 Rails 中为控制器运行 rspec 测试时,我在第二行收到错误 "NoMethodError : undefined method 'id' for nil.Nilclass"。
params[:tag_id] 是从前端传下来的,所以我无法初始化它。 我该如何纠正这个错误?
#enables the id to be a name rather than just a number
if (params[:tag_id].class) == String && (params[:tag_id]!= "alltags")
tag_id = Tag.find_by(name: params[:tag_id]).id
elsif params[:tag_id] == "alltags"
tag_id = "alltags"
else
tag_id = params[:tag_id]
end
添加 rspec 测试用例
context "POST search_time_range" do
it 'returns all data within a certain time range and where the tag_id matches' do
params = {
"range_start" => "2016-01-01",
"range_end" => "2016-01-01",
"tag_id" => "122"
}
post :search_time_range, params
expect(response).to have_http_status(200)
end
【问题讨论】:
-
Tag.find_by(name: params[:tag_id])没有找到Tag记录。你确定不想要Tag.find(params[:tag_id])? -
是的,如果从前端传递的值是字符串,我只想获取 id。
标签: ruby-on-rails ruby-on-rails-3 rspec