属性值为零

时间:2012-04-09 10:58:15

标签: ruby ruby-on-rails-3

有人可以告诉我为什么会这样吗?

我使用Ruby on Rails创建了一个社交网站。这是我第一次使用RoR进行编程。

我有一个名为“友谊”的模型,其中包含一个“已阻止”属性,以指示用户是否已阻止其他用户。

当我在IRB中运行以下内容时 -

friendship = u.friendships.where(:friend_id => 22).first

IRB给了我 -

  Friendship Load (0.6ms)  SELECT `friendships`.* FROM `friendships` WHERE `friendships`.`user_id` = 17 AND `friendships`.`friend_id` = 22 LIMIT 1
=> #<Friendship id: 33, user_id: 17, friend_id: 22, created_at: "2012-04-07 10:29:49", updated_at: "2012-04-07 10:29:49", blocked: 1> 

正如您所见,“已屏蔽”属性的值为“1”。

但是当我运行以下

1.9.2-p290 :030 > friendship.blocked    
=> nil 

- 它说,被阻止的值是'nil'而不是'1'。 为什么会这样? 这可能是一个非常愚蠢的错误,但我是RoR的新手,所以请帮助我!

我最初没有包含'阻止'的访问方法..我试过了,但仍然给出了相同的结果.. 以下是友谊模型..

class Friendship < ActiveRecord::Base
    belongs_to :friend, :class_name => "User"
    validates_uniqueness_of :friend_id , :scope => :user_id

    attr_accessor :blocked
    attr_accessible :blocked
end

这是表格的架构:

1.9.2-p290 :009 > friendship.class
=> Friendship(id: integer, user_id: integer, friend_id: integer, created_at: datetime, updated_at: datetime, blocked: integer) 

1 个答案:

答案 0 :(得分:4)

attr_accessor :blocked创建了两种方法:

def blocked
  @blocked
end

def blocked=val
  @blocked = val
end

这会重写AR blocked方法,该方法应返回属性值

所以你应该从你的代码中删除这一行。