0

I have Usersthat have many Peoplethat have many Projects.

たとえば、新しいプロジェクトは次のように作成できます。

def new
  @project = Project.new(:person_id => params[:person_id])
  @title = "New project"
end

person_idユーザーが実際に自分に属するものだけを挿入できるようにするにはどうすればよいですか?

4

2 に答える 2

1

セッション (サーバー側) から user_id を取得しますが、パラメーター (クライアント側) は取得しません。

def new
  @project = Project.new(:person_id => session[:current_user_id])
end

または、インターフェイスをより制限します。

def new
  @project = Project.create_for_current_user(session)
end

def Project.create_for_current_user(session)
  return Project.new(:person_id => session[:current_user_id])
end 
于 2012-10-14T22:39:11.620 に答える
1

これには暗黙の承認を使用することを検討してください。最終結果は次のようになります。

# GET people/1/projects/new
def new
  user = User.find(session[:current_user_id])
  @project = user.people.find(params[:person_id]).projects.build(:title => "New Project")
end

# POST people/1/projects
def create
  user = User.find(session[:current_user_id])
  user.people.find(params[:person_id]).projects.create(params[...])
end

次に、routes.rbで:

resources :people do
  resources :projects
end

このアプローチでは、新しいプロジェクトは自動的にユーザーに帰属します。

ちなみに、Devise や before_filter などの使用を検討する必要があります。これUser.findにより、各アクションで行う必要がなく、より便利に現在のユーザーにアクセスできるようになります。

さらに、コントローラー アクションに @title 変数を追加しないでください。各コントローラ アクションは、リソースまたはリソースのコレクションを共有する必要があります。

于 2012-10-14T23:02:51.330 に答える