1

devise 및 cancan과 함께 작은 프로젝트 설정이 있습니다. 사용자, 프로젝트, 책임 및 작업 모델이 있습니다. 프로젝트에 중첩 된 작업이 있습니다. 각 프로젝트는 하나 이상의 사용자에게 할당됩니다. 작업 모델에는 이름, user_id 및 project_id가 있습니다. 인증 및 권한 부여가 예상대로 작동합니다.user_id를 nested_resource 모델에 전달하는 방법은 무엇입니까?

새 작업 (이름에 대한 입력 전용)을 추가하면 project_id가 자동으로 모델/테이블로 전달되지만 (이는 라우팅 때문인 것으로 생각되지만) user_id는 아닙니다.

hidden_field에 user_id를 전달해야합니까, 아니면 필터 이전에 이것을 설정할 수 있습니까?

누군가가 taskcontroller에서 howto set 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 단지 만들 행동에 전달할 수 있습니다 당신을 고안 사용하는 경우