Ruby on rails Rails:在Rails中传递验证

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

我创建了一个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.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