mri*_*ula 1 ruby ruby-on-rails-3
有人可以告诉我为什么会这样吗?
我使用Ruby on Rails创建了一个社交网站。这是我第一次使用RoR编程。
我有一个名为“ Friendship”的模型,其中包含一个属性“ blocked”,以指示该用户是否已阻止另一个用户。
当我在IRB中运行以下命令时-
friendship = u.friendships.where(:friend_id => 22).first
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
如您所见,“已阻止”属性的值为“ 1”。
但是当我运行以下命令时
1.9.2-p290 :030 > friendship.blocked
=> nil
Run Code Online (Sandbox Code Playgroud)
-它说,blocked的值是'nil'而不是'1'。为什么会这样呢?这可能是一个非常愚蠢的错误,但是我是RoR的新手,请帮助我!
最初我没有为'blocked'包括accessor方法。我尝试过,但仍给出了相同的结果。
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
Run Code Online (Sandbox Code Playgroud)
这是表的架构:
1.9.2-p290 :009 > friendship.class
=> Friendship(id: integer, user_id: integer, friend_id: integer, created_at: datetime, updated_at: datetime, blocked: integer)
Run Code Online (Sandbox Code Playgroud)
attr_accessor :blocked 创建两个方法:
def blocked
@blocked
end
def blocked=val
@blocked = val
end
Run Code Online (Sandbox Code Playgroud)
这将重写AR blocked方法,该方法应返回属性值
因此,您应该从代码中删除此行。
| 归档时间: |
|
| 查看次数: |
673 次 |
| 最近记录: |