2011-10-31 9 views
3

モデルを使用して自動的に普及したいすべてのテーブルのip_addressフィールドがあります。どのように私はモデルでそれを設定できますか?私はこれにbefore_saveフィルタを使用しなければならないと思いますか?モデル内でユーザーのIPアドレスを取得する

答えて

1

フィルタを使用する理由はありません。 ip_address列は、他の列と同じように列です。あなたの意図に応じて、一致するモデルインスタンスを見つけて、そのip_address列を変更するか、columnmを含む新しいエントリを作成する必要があります。

そして、あなたは、すべてのテーブルの列にその悪いスタイルがあると言います。 ip_addressは、すべての単一モデルではなく、ユーザーに割り当てられます。私は、という新しいモデルを作成して、ip_address,user_idcreated_atupdated_atフィールドを含むモデルを作成することをお勧めします。最後のものは自動的に生成されます。その後、中たびにユーザーがログインをIP_ADDRESSを保存することができ、あなたのコントローラでこのように:。

login=Login.new 
login.user=current_user 
login.ip_address=request.remote_ip 
login.save 
+0

テーブルが匿名ユーザー(これらは、アカウントを作成しない訪問者です)で使用されます。したがって、1つ以上のテーブルにセキュリティ上の理由からip_addressを記録する必要があります。あなたの解決策はかなり繰り返しているようです。私が知りたいのは、フォームやアクションの処理時に手動で設定する必要はなく、モデルに自動的に設定できるかどうかです。 – Hopstream

+0

ユーザーを認識するためにログインする必要はありません。 'Visitor'というモデルを作成し、そのセッションでvisitor_idを書くことができます。したがって、ログインをせずにユーザーを認識することができ、 'Visit'モデル(私が話した' Login'モデルと同じ名前のフィールドを持っている)を 'Visitor'モデルに関連付けることができます。 -住所。 – davidb

関連する問題