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
...