加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails在模型中设置默认布尔值

发布时间:2020-12-17 03:03:59 所属栏目:百科 来源:网络整理
导读:我正在Rails编写一个简单的博客应用程序,版本3.2.8.我已将“posts”资源搭建如下: rails g scaffold post title:string body:string islive:boolean 我希望默认情况下将islive设置为false,我试图在我的模型中这样做.我还决定我不希望它可用于大规模分配,所
我正在Rails编写一个简单的博客应用程序,版本3.2.8.我已将“posts”资源搭建如下:

rails g scaffold post title:string body:string islive:boolean

我希望默认情况下将islive设置为false,我试图在我的模型中这样做.我还决定我不希望它可用于大规模分配,所以我编写了我的模型如下:

class Post < ActiveRecord::Base
  attr_accessible :body,:title

  before_save :default_values

  def default_values
    self.islive = false
  end
end

我还从表单中删除了islive字段.问题是当我尝试使用上面的模型创建一个新帖子时,它不会保存.控制台看起来像这样:

Started POST "/posts" for 127.0.0.1 at 2012-10-14 18:23:30 +0100
Processing by PostsController#create as HTML
  Parameters: {"utf8"=>"?","authenticity_token"=>"/lNa21JBeBz/H2cYLqAsF8uWr1frLV88WsOVKzOqwb4=","post"=>
 {"title"=>"sample title","body"=>"the body"},"commit"=>"Create Post"}
(0.1ms)  begin transaction
(0.0ms)  rollback transaction
Rendered posts/_form.html.erb (1.8ms)
Rendered posts/new.html.erb within layouts/application (2.5ms)
Completed 200 OK in 29ms (Views: 26.3ms | ActiveRecord: 0.1ms)

没有任何东西得救.我只是得到了开始事务回滚事务但是,如果我将default_values更改为:

def default_values
    self.islive = 'false'
end

一切正常,它保存得很好,islive有一个虚假的价值.即使我只是做这样的事情:

def default_values
    self.islive = false
    Rails.logger.debug self.islive
end

然后保存工作.

有人可以解释为什么会这样做吗?

解决方法

before_save和其他回调如果返回false则终止保存.这正是你所做的.如果你忘记它,这是一个陷阱.你可以在最后一行放一些真的(甚至是零):

def default_values
  self.islive = false
  true
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读