1

なぜこれが起こっているのか誰か教えてもらえますか?

Ruby on Rails を使用してソーシャル ネットワーキング Web サイトを作成しました。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 

- ブロックされた値は「1」ではなく「nil」です。なぜこうなった?これは非常にばかげた間違いかもしれませんが、私は 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) 
4

1 に答える 1

5

attr_accessor :blocked2 つのメソッドを作成します。

def blocked
  @blocked
end

def blocked=val
  @blocked = val
end

そして、これはARblockedメソッドを書き換え、属性値を返す必要があります

したがって、コードからこの行を削除する必要があります。

于 2012-04-09T11:24:48.490 に答える