1

ユーザーがログインするアプリがあり、特定の会社に関連付けられています。ユーザーが自分の会社のデータのみを表示できるように、すべてのモデルにデフォルトのスコープを追加したいと考えています。だから私のLocationモデルで私が試した:

default_scope where(:company_id => session[:company_id])

私のアプリでこれらをポイ捨てするのではなく。私の考えは、デフォルトでLocationクエリが常に現在のユーザーの company_id に制限されるように安全にすることです。他のすべてのモデルは何らかの形で に関連付けられているLocationため、これを行う必要があるのはここだけです。

私はいくつかのことを調べていて、これを行うのは悪い考えだと思いました (実際にどのように行うかはわかりませんでしたが)。

実際にこれを行うことはできますか?おそらくこれを回避するより良い方法はありますか?

4

2 に答える 2

2

私のアプローチは、ApplicationController 内にプライベート メソッドを持つことです。

class ApplicationController < ActionController::Base

  helper_method :my_model

  def my_model
    Model.where(:company_id => session[:company_id])
  end

  ...
end

そして、具体的なアクション内から使用します。

@models = my_model.where("created_at > ?", 2.weeks.ago)

helper_methodビュー内からメソッドをヘルパーとして使用できることを確認します。これで一般的なアイデアが得られることを願っています。

于 2012-06-25T13:08:16.000 に答える