我正在构建一个数据库,我的创建操作遇到了问题。我的创建操作代码是:
def create
@skills = Skill.new(params[:skill])
if @skills.save
redirect_to :action => 'index'
else
@skills = Skill.find(:all)
render :action => 'new'
end
end
我的错误信息是:
ActiveModel::ForbiddenAttributesError in SkillsController#create
ActiveModel::ForbiddenAttributesError
我认为存在问题而且我没有保存所有需要的参数,但我不确定。感谢任何知道可能出现问题的人,我会继续自己搞乱。再次感谢。
答案 0 :(得分:3)
在你的控制器中添加如下内容:
private
def skill_params
params.require(:skill).permit(:attribute_1, :attribute_2, :attribute_3)
end
然后将create更改为:
def create
@skills = Skill.new(skill_params)
if @skills.save
redirect_to :action => 'index'
else
@skills = Skill.find(:all)
render :action => 'new'
end
end
这是特定于Rails 4:这个版本的ruby on rails fordids直接使用params来实例化一个新的Model对象。
通过保护应用程序免受某些漏洞攻击,使您的应用程序更加安全:例如,假设有人请求您的应用程序创建新用户并将admin: true
作为参数传递。旧方法可能会创建管理员用户。相反,Rails 4方式强制您过滤参数。