【发布时间】:2013-12-17 22:13:55
【问题描述】:
我一直在使用 strong_params 并试图让对象创建通过。我有两个问题。
- 如何找出导致问题的属性?
- 我在下面的代码中遗漏了什么?
让我们从错误开始,日志什么也没告诉我。
ActiveModel::ForbiddenAttributesError in JobsController#create
只是为了咯咯笑,这是我认为不太有用的日志:
Started POST "/jobs" for 127.0.0.1 at 2013-12-17 22:03:59 +0000
Processing by JobsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"Ohq4lVqPVMpjzbZwCfJNYBL78TAcoC0WZLSmpCzMD3k=", "job"=>{"job_title"=>"Junior Rails Developer", "job_description"=>"A new position getig nsomethfins lansnana", "languages"=>["", "Rails", "Ruby"], "country_code"=>"AO", "job_type"=>"Full-Time", "job_salary"=>"30000", "job_level"=>"Junior"}, "commit"=>"Create Job"}
User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 ORDER BY "users"."id" ASC LIMIT 1
Completed 500 Internal Server Error in 8ms
ActiveModel::ForbiddenAttributesError (ActiveModel::ForbiddenAttributesError):
有道理,但是如果我看看我的创建:
def create
binding.pry
@job = Job.new(job_params)
respond_to do |format|
if @job.save
format.html { redirect_to @job, notice: 'Job was successfully created.' }
format.json { render action: 'show', status: :created, location: @job }
else
format.html { render action: 'new' }
format.json { render json: @job.errors, status: :unprocessable_entity }
end
end
end
强参数:
def job_params
params.require(:job).permit(:job_title, :job_level, :job_description, :job_salary,
:country_code, :job_type, :state, :languages => [])
end
我主要想知道如何找出问题出在哪里,因为这似乎是大海捞针的错误。
【问题讨论】:
-
你重启本地服务器了吗?
-
哈,只是检查一下。查看您的语言在日志中显示为哈希。尝试将 :languages 切换为 language: [] 或 :languages => [] 以与您的代码保持相同的语法
-
您是否在模型中为您允许的所有属性定义了 attr_accessible?
-
现在应该有所作为吗?我已经发布了一个答案,展示了如何处理一些不同的 strong_parameter 数据。
-
您能分享一下您的工作型号代码吗?
标签: ruby-on-rails