QA@IT
«回答へ戻る

嘘ついてました。

376
 
   def initialize(user)
     user ||= User.new # guest user (not logged in)
-    cannot :all, Blog do |blog|
-      user.id != blog.user_id
-    end
+    
     can :read, Blog
+    
+    can :manage, Blog do |blog|
+      user.id == blog.user_id
+    end
   end
 end
 ```

すいません。自己解決しました。

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new # guest user (not logged in)

    can :read, Blog

    can :manage, Blog do |blog|
      user.id == blog.user_id
    end
  end
end

これならうまくいきました。
自分は遅延評価をメソッドを後で実行するものだとは理解していましたが、中でつかう変数等は定義された時点の物を使うことを理解していませんでした。

お世話がせしました。

すいません。自己解決しました。

```ruby
class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new # guest user (not logged in)
    
    can :read, Blog
    
    can :manage, Blog do |blog|
      user.id == blog.user_id
    end
  end
end
```

これならうまくいきました。
自分は遅延評価をメソッドを後で実行するものだとは理解していましたが、中でつかう変数等は定義された時点の物を使うことを理解していませんでした。

お世話がせしました。

回答を投稿

すいません。自己解決しました。

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new # guest user (not logged in)
    cannot :all, Blog do |blog|
      user.id != blog.user_id
    end
    can :read, Blog
  end
end

これならうまくいきました。
自分は遅延評価をメソッドを後で実行するものだとは理解していましたが、中でつかう変数等は定義された時点の物を使うことを理解していませんでした。

お世話がせしました。

すいません。自己解決しました。

```ruby
class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new # guest user (not logged in)
    cannot :all, Blog do |blog|
      user.id != blog.user_id
    end
    can :read, Blog
  end
end
```

これならうまくいきました。
自分は遅延評価をメソッドを後で実行するものだとは理解していましたが、中でつかう変数等は定義された時点の物を使うことを理解していませんでした。

お世話がせしました。