Rails:你能将参数传递给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 

我收到错误,因为模型不知道是什么角色。

您可以使用attr_accessor创建虚拟属性,并将该属性设置为创建操作的一部分。

最简洁的答案是不。 你不能将任何参数传递给after_create。

然而,你尝试做的事情是非常普遍的,还有其他方法。

其中大多数涉及在创建相关对象之前分配关系,并让ActiveRecord处理所有事情。

实现这一目标的最简单方法取决于角色和用户之间的关系。 如果是一对多(每个用户都有一个角色),那么让您的用户属于一个角色,并通过表单发送role_id。

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

如果用户和角色之间存在多对多的关系,则可以通过分配给@ user.role_ids来实现相同的关系

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

两种情况下的控制器都是这样的

 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