Ruby on rails Rails:在Rails中传递验证
我创建了一个rake填充文件来构建虚拟数据Ruby on rails Rails:在Rails中传递验证,ruby-on-rails,ruby,Ruby On Rails,Ruby,我创建了一个rake填充文件来构建虚拟数据 @corp_page = CorporatePage.create(title: 'Home', static_descriptor: 'Home') @panel_count = CorporatePanel::PANEL_TYPE.count if @corp_page.title == 'Home' ---- else puts "Corp Page not saved" puts
@corp_page = CorporatePage.create(title: 'Home', static_descriptor: 'Home')
@panel_count = CorporatePanel::PANEL_TYPE.count
if @corp_page.title == 'Home'
----
else
puts "Corp Page not saved"
puts @corp_page.inspect
end
在inspect上,我的验证似乎阻止创建实例。为什么?
Freddys-MacBook-Pro:gll_corporate McGroarty$ rake db:populate
not saved
#<ActiveModel::Errors:0x007fdb2f5162f8 @base=#<CorporatePage id: nil, title: nil, static_descriptor: nil, workflow_state: "draft", created_at: nil, updated_at: nil>, @messages={:title=>["can't be blank"]}>
Freddys MacBook Pro:gll_corporate McGrowty$rake db:populate
未保存
#[“不能为空”]}>
这些值与验证的值完全相同。为什么这不起作用
CorpPage模型
#==架构信息
#
#表名:公司信息单元页面
#
#id:整数不为空,主键
#标题:字符串(255)
#静态描述符:字符串(255)
#工作流状态:字符串(255)默认值(“草稿”)
#创建时间:datetime
#更新时间:datetime
#
类CorporatePage
轨道4
感谢您,Rails在默认情况下防止了大量变量赋值 据我所知,使用rails 4,您可以将这一行添加到应用程序的GEM文件中:
gem 'protected_attributes'
执行
bundle install
从命令行
在你的模型里
attr_accessible :title, :static_descriptor
通过这种方式,您可以将允许进行质量分配的属性列为白名单。
实际上,它曾经是一个默认功能,但已经被弃用,我仍在学习新的“正确方法”:
我会评论的,因为我的答案肯定遗漏了很多,但我仍然不被允许这么做。(请发表评论)在您已经调用了
create
之后,为什么还要调用save
?是否要调用new
而不是create
?抱歉,不应该在那里。它仍然没有保存。向我们展示您的CorporatePage模型。还有,rails的版本是什么?@BroiSatse看到我的更新了吗?这不正确。尝试使用CorporatePage.create!(…)
如果创建失败,将立即引发错误。把结果贴在这里。因为我看不出您的if
语句的计算结果为false。即使create
由于CorporatePage实例无效而无法保存该实例,也应设置该值。@giulp ia m using rails 4Mass assignment保护仅在尝试在控制器中使用参数时适用。如果你像这样用手擀的土豆泥递给ActiveRecord,它本身不会眨眼两次。真棒。我只是需要一个可访问的属性,我认为它被低估了。就本文而言,任何方式都是有效的。伟大的
attr_accessible :title, :static_descriptor