2010-02-09 5 views
6

내 응용 프로그램에서는 관리자 역할을 가진 사용자 만 새 사용자를 만들 수 있습니다. 새 사용자 양식에는 새 사용자에게 할당 할 수있는 사용 가능한 역할 각각에 대한 선택 상자가 있습니다.레일 : after_create 메소드에 인수를 전달할 수 있습니까?

after_create 콜백 메서드를 사용하여 사용자에게 역할을 할당하고 싶습니다. After_create 메서드에서 선택 상자의 선택된 값에 어떻게 액세스합니까? 사용자 모델에서

def create 
    @user = User.new(params[:user]) 

    respond_to do |format| 
     if @user.save 
     flash[:notice] = 'User creation successful.' 
     format.html { redirect_to @user } 
     else 
     format.html { render :action => 'new' } 
     end 
    end 
    end 

나는이 :

after_create :assign_roles 

    def assign_roles 
    self.has_role! 'owner', self 
    # self.has_role! params[:role] 
    end 

모델이 어떤 역할을 모르기 때문에 나는 오류가 발생합니다.

답변

13
처럼 보이는이있는 경우

attr_accessor을 사용하여 가상 속성을 만들고 해당 속성을 작성 작업의 일부로 설정할 수 있습니다.

+1

네, 원하는 것은 "가상 속성"으로 확인란을 선택하는 것입니다. 이것에 대한 훌륭한 Railscast가 있습니다 : http://railscasts.com/episodes/167-more-on-virtual-attributes –

4

짧은 대답은 아니오입니다. after_create에 인수를 전달할 수 없습니다.

그러나 무엇을하려고하면 꽤 일반적이며 그 주위에 다른 방법이 있습니다.

대부분의 경우 문제의 객체가 생성되기 전에 관계를 지정하고 ActiveRecord가 모든 것을 처리하도록합니다.

가장 쉽게 수행 할 수있는 방법은 역할과 사용자 간의 관계에 따라 다릅니다. 1 대 다수 (각 사용자마다 하나의 역할이 있음) 인 경우 사용자가 역할에 속하게하고 양식을 통해 role_id를 보냅니다.

<%= f.collection_select :role_id, Role.all, :id, :name %> 

은 어느 경우에

<%= f.collection_select :role_ids, Role,all, :id, :name, {}, :multiple => :true %> 

user.role_ids @에 컨트롤러를 지정하여 동일한을 달성 사용자 및 역할과 많은 관계에 많은

def create 
    @user = User.new(params[:user]) 

    respond_to do |format| 
    if @user.save 
     flash[:notice] = 'User creation successful.' 
     format.html { redirect_to @user } 
    else 
     format.html { render :action => 'new' } 
    end 
    end 
end 
관련 문제