ruby-on-rails - Rails 在模型中设置默认 boolean 值

标签 ruby-on-rails ruby ruby-on-rails-3 boolean default

我正在用 Rails 3.2.8 版编写一个简单的博客应用程序。我已经搭建了“帖子”资源,如下所示:

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)

没有任何东西被保存。我只是得到 begin transaction rollback transaction 但是,如果我将 default_values 更改为:

def default_values
    self.islive = 'false'
end

一切正常,保存良好,islivefalsey 值。即使我只是做这样的事情:

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

然后保存工作。

有人能解释一下为什么会这样吗?

最佳答案

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

def default_values
  self.islive = false
  true
end

关于ruby-on-rails - Rails 在模型中设置默认 boolean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12884743/

相关文章:

ruby-on-rails - 如何测试自定义邮件程序?

javascript - "Uncaught TypeError: undefined is not a function"错误只发生在生产中——而不是在开发中

ruby - 如何将字符串切成对

ruby - `var = something rescue nil` 行为

ruby-on-rails-3 - 用简单形式格式化日期

ruby-on-rails - Activerecord 的 Rails Domain 模型解耦

ruby-on-rails - Rails View 在双花括号中显示格式输入,例如 {{parameter}} 而不是实际值

ruby-on-rails - 在 ERB 内联代码中获取第一个非 nil 数组值

ruby-on-rails - Ruby on Rails 3 : How to create a 12 hour (with AM/PM) time select element?

Rails3 中的 SOAP?