Ruby on rails 在rails 3.2中插入值为false的记录时出错

Ruby on rails 在rails 3.2中插入值为false的记录时出错,ruby-on-rails,sqlite3-ruby,Ruby On Rails,Sqlite3 Ruby,最近我开始学习Rails 现在,我正在我自己的项目中实施友谊关系。下面是一些类似的代码(其中一些是从互联网上收集的) 但当我将approved=false设置为 Friendship.create(:user_id=>6, :friend_id=>7, :approved=>0) (0.1ms) begin transaction (0.1ms) rollback transaction => #<Friendship id: nil, user_id: 6,

最近我开始学习Rails

现在,我正在我自己的项目中实施友谊关系。下面是一些类似的代码(其中一些是从互联网上收集的)

但当我将approved=false设置为

Friendship.create(:user_id=>6, :friend_id=>7, :approved=>0)
(0.1ms)  begin transaction
(0.1ms)  rollback transaction
=> #<Friendship id: nil, user_id: 6, friend_id: 7, message: nil, approved: false, created_at: nil, updated_at: nil>
您能告诉我发生了什么以及如何解决它吗。

您可以指定:

validates :approved, :presence => true
但在Rails中:

false.present? # => false
因此,您的验证失败了

您可以通过查看验证错误来验证这一点:

friendship = Friendship.create(:user_id=>6, :friend_id=>7, :approved=>0)
friendship.errors

这可能与验证有关。只需删除验证。反正也没用。
Friendship.create(:user_id=>6, :friend_id=>7, :approved=>0)
(0.1ms)  begin transaction
(0.1ms)  rollback transaction
=> #<Friendship id: nil, user_id: 6, friend_id: 7, message: nil, approved: false, created_at: nil, updated_at: nil>
sqlite> insert into friendships (user_id, friend_id, created_at, updated_at) values(11, 6, '2012-10-13 14:15:36', '2012-10-13 14:15:36');
sqlite> select * from friendships;
        id = 1
   user_id = 11
 friend_id = 6
   message = 
  approved = f
created_at = 2012-10-13 14:15:36
updated_at = 2012-10-13 14:15:36
validates :approved, :presence => true
false.present? # => false
friendship = Friendship.create(:user_id=>6, :friend_id=>7, :approved=>0)
friendship.errors