0

Ruby on Rails 3.2.2 を使用していますが、次のコードの長所短所を知りたいです。

class ApplicationController < ActionController::Base
  before_filter :set_current_user_for_models

  private

  def set_current_user_for_models
    User.current_user = User.find(...) # Find the user from cookies.
  end
end

class User < ActiveRecord::Base
  attr_accessible :current_user

  private

  def some_method(user)
    if User.current_user == user
      # Make a thing...
    else
      # Make another thing...
    end
  end
end

class Article < ActiveRecord::Base
  def some_method(user)
    if User.current_user == user
      # Make a thing...
    else
      # Make another thing...
    end
  end
end

何かアドバイスはありますか?コードをどのように改善しますか?

@Wawa Looの回答に対する@toklandのコメントの後に更新

: 主な違いは、 、、モデル コールバックUser.current_userでも更新する必要があることです。このようなもの:after_findafter_create...

class User < ActiveRecord::Base
  attr_accessible :current_user

  after_initialize :some_method

  private

  def some_method
    if User.current_user == self
      # Make a thing...
    else
      # Make another thing...
    end
  end
end

class Article < ActiveRecord::Base
  after_destroy :some_method

  private

  def some_method
    if User.current_user == self.user
      # Make a thing...
    else
      # Make another thing...
    end
  end
end
4

2 に答える 2

0

クラス User のアクセサとしてではなく、に格納することをお勧めcurrent_userします。sessionメソッドset_current_user_for_modelsはリクエストごとに実行されます。とにかくどのようにユーザーを見つけますUser.find(...)か?

于 2012-06-20T09:16:48.713 に答える
0

あなたのコードは問題ないようです。Rails 開発の概要については、この Rails スタイル ガイドを読むことをお勧めします。

于 2012-06-20T09:11:07.887 に答える