1

私はdeviseとcancanで小さなプロジェクトセットアップをしています。ユーザー、プロジェクト、責任者、およびタスクモデルがあります。プロジェクトにはネストされたタスクがあります。各プロジェクトは1人または複数のユーザーに割り当てられます。タスクモデルには、名前、user_id、およびproject_idがあります。認証と承認は期待どおりに機能しています。user_idをnested_resourceモデルに渡すにはどうすればいいですか?

新しいタスク(名前の入力のみ)を追加すると、project_idが自動的にモデル/テーブルに渡されます(これはルーティングのためだと思いますがuser_idではなく)。

hidden_​​fieldでuser_idを渡す必要がありますか、それとも何らかの理由でbeforeフィルタでこれを設定することはできますか?

誰かがタスクコントローラのuser_idを設定する方法についてヒントを伝えることができますか?

おかげ

# Routes 

resources :projects do 
    resources :tasks 
end 

#Models 

class User < ActiveRecord::Base 
    has_many :responsibilities, :dependent => :destroy 
    has_many :projects, :through => :responsibilities 
    has_many :tasks, :dependent => :destroy 
... 

class Project < ActiveRecord::Base 
    has_many :tasks, :dependent => :destroy 
... 

class Task < ActiveRecord::Base 
    belongs_to :project 
    belongs_to :user 
... 

# Tasks Controller with all Task.find/new/update/... 
# methods removed like explained in cancan manual 

class TasksController < ApplicationController 
    load_and_authorize_resource :project 
    load_and_authorize_resource :task, :through => :project 
    ... 
    def create 
    respond_to do |format| 
     if @task.save 
     format.html { redirect_to [@project, @task], notice: 'created.' } 
     else 
     format.html { render action: "new" } 
     end 
    end 

# Task Form View 
<%= semantic_form_for [@project, @task] do |f| %> 
    <%= f.inputs do %> 
    <%= f.input :name %> 
    <% end %> 
    <%= f.actions %> 
<% end %> 

更新

前のフィルターで動作するようです。これは正しい方法ですか?

class TasksController < ApplicationController 
    before_filter :set_user, :only => [:create] 
    load_and_authorize_resource :client 
    load_and_authorize_resource :task, :through => :client, :shallow => true 
    ... 
    def set_user() 
    params[:task][:user_id] = current_user.id.to_s 
    end 
    ... 

答えて

0

あなたが工夫使用している場合、あなたはちょうどあなたが、これはあなたが

何を意味するかであるかどうかわからない静か

def create 
    @task.user = current_user 
    respond_to do |format| 
     if @task.save 
     format.html { redirect_to [@project, @task], notice: 'created.' } 
     else 
     format.html { render action: "new" } 
     end 
    end 

をUSER_ID作成するアクションに渡すことができます

関連する問題