1

アカウントが候補者と関連タスクを表示できるようにする必要がある新しいプロジェクトを開始しました。

account.rb

has_many :candidates

Candidate.rb

has_many :tasks
belongs_to :account

task.rb

belongs_to :candidate

ルートは/candidates/ 4 / tasks / 3を許可するように設定されており、アカウントXはタスク3を持つ候補者4にアクセスできます。

tasks_controller.rbは現在次のようなものです:

def show
  @task = Task.find params[:id]
end

質問:他のアカウントがタスク3にアクセスできないようにするためのベストプラクティスのアプローチは何ですか?

1つのアイデアはこのようなものかもしれませんが、非常に厄介なようです。

def show
  @task = Account.find(current_account).candidates.find(params[:candidate_id]).tasks.find(params[:id)
end

したがって、結合が失敗した場合、アクセス権はありません。

別の方法は、スコープを使用して実行される場合があります。照会されたすべてのタスクが候補者およびcurrent_accountに結合されていることを確認します。

また、before_filterを実行して、候補テーブルに対してスタンドアロンクエリを実行し、アカウントにアクセス権があることを確認することもできます。これによりクエリが追加されるため、理想的ではありません。

私はここで困惑しています...しかし、他の人がこれについてどうやって行くのか知りたいですか?

4

1 に答える 1

0

レールの方法でそれを行います...

current_account = Account.find params [:id]

@tasks = current_account.candidates.collect(&:tasks)

これはあなたの仕事をします。

于 2013-01-21T06:35:35.387 に答える