2011-05-16 6 views
0

나는 사용자가 프로젝트를 소유하고 프로젝트의 일부로 팀을 구성 할 수있는 프로젝트가 있습니다.레일 3 - 모델 연결 문제

내 모델은 같다 :

class User 
has_many :projects, :foreign_key => "owner_id" 
has_many :project_memberships, :foreign_key => "member_id" 
has_many :shared_projects, :class_name => "Project", :through => :project_memberships, :foreign_key => "member_id" 
end 

class Project 
belongs_to :owner, :class_name => "User" 
has_many :project_memberships 
has_many :members, :class_name => "User", :through => "project_memberships", :foreign_key => "member_id" 
end 

내 질문은 : 어떻게 새로운 프로젝트는 그래서 사용자가 내가 중첩 된 자원을 사용하지 않는 때문에 그것을 소유 할 수있는 등/삭제 만들 수 있습니까? 사전에

def new 
@project = Project.new 
end 

def create 
@owner = User.find(params[:user_id]) 
@project= @owner.projects.build(params[:project]) 
    ... 
end 

감사 :

여기 내 프로젝트 컨트롤러입니다.

답변

1

질문을 올바르게 이해하면 세션에 현재 로그인 한 사용자 ID를 저장하거나 사용자를 위해 수행 할 일부 인증 gem (예 : devise)을 사용해야합니다.

Devise는 User 모델의 인스턴스를 반환하는 도우미 메서드 current_user을 제공합니다. 그래서 당신과 같이 할 수있다 :

def create 
@project= current_user.projects.build(params[:project]) 
    ... 
end 

업데이트 당신이 양식을 통해 user_id를 통과하면, 당신은 누군가가 다른 사용자의 ID로 프로젝트를 만들 수 있습니다. 현재 사용자가 속한 무언가를 만드는 행동은 서버 측의 현재 사용자에게 제한되어야합니다.

+0

나는 이미 그것을했고 효과가 없다고 생각합니다. 내 양식은 다음과 같이 시작합니다.'<% = form_for ([@ user, @ project]) do | f | %>'. 잘못인가? 답변 해주셔서 감사합니다. – Luk

+0

사실'build' 메소드에는 몇 가지 문제점이 있었기 때문에'Model.create'로 끝내고 current_user를 더티 빠른 수정을위한 인자로 전달했습니다. – bassneck

+0

아직 작동하지 않습니다 ... – Luk