2012-10-16 2 views
0

을 생성에서 생성 된 객체를 검색, 나는 다음과 같은 개체가 :InheritedResources 번호 내 레일 응용 프로그램에서

Group: has_many users through group_membership 
GroupMembership: belongs_to user, belongs_to group 
User: has_many groups through group_membership 

사용자 그룹을 만들 수 있습니다. 이 경우 사용자를 그룹에 자동으로 추가하려고합니다. 내 GroupsController, 나는 다음 (확장 InheritedResources)가 :

super do |success, failure| 
    if success 
    GroupMembership.create(:user_id => current_user, :group_id => ???) 
    ... 
end 

문제는 내가 super이 만든 객체를 검색 할 수 있습니다. 이것을 할 수있는 방법이 있습니까? 또는 더 나은 방법은 LockGroup 모델을 변경하여 항상이 연관성을 수행하는 것입니까?

답변

1

콜백이 실행되면 컨트롤러에 이미 생성 된 그룹에 해당하는 표준 인스턴스 변수가 있습니다. @group !!

class GroupController < InheritedResources::Base 

    def create 
    super do |success, failure| 
     if success 
     GroupMembership.create(:user_id => current_user, :group_id => @group.id) 
     ... 
    end 
    end 

end 
0

귀하의 그룹에 주어진 params 키가 있다고 가정합니다 : 그룹. 그런 다음 모델에서 nested_attributes_for 옵션을 사용할 수 있습니다.

class User < ActiveRecord::Base 
    accept_nested_attributes_for :group_membership 
end 

# on your controller 
before_filter :add_user, :on => [:create] 

def add_user 
    params[:group][:group_membership_attributes] = {} 
    params[:group][:group_membership_attributes][:user] = current_user 
end 

을하거나 사용자 초기화에 그룹 구성원 구축 : 그럼 당신은 작성 작업에서 필터 전에 사람들을 설정할 수 있습니다

class User < ActiveRecord::Base 
    def after_initialize 
    build_group_membership 
    end 
end 


# on your controller 
before_filter :add_user, :on => [:create] 

def add_user 
    params[:group][:user] = current_user 
end 

을 그리고 자동적으로 작동합니다.

관련 문제