我在用户资源的视图中有此代码。此代码基本上删除了用户的特定角色。基本上,我的模型是这样的:
Users 1<->N Roles N->1 Profile
而且......
<%= link_to role_path(profile_id: profile.id, user_id: @user.id), type: 'button', method: :delete do %>
<%= button_tag class: "btn btn-default btn-danger btn-xs" do %>
<span class="glyphicon glyphicon-trash"></span> Remover
<% end %>
<% end %>
如您所见,它只是调用Role控制器中的destroy动作,即:
def destroy
@role = Role.find_by(user_id: @user.id, profile_id: @profile.id)
if @role.destroy
flash[:success] = 'Perfil foi removido.'
end
redirect_to user_path(@user)
end
好吧,我希望我的用户至少有一个与之关联的角色,因此,在我创建的角色模型中:
class Role < ActiveRecord::Base
before_destroy :number_of_roles
belongs_to :user
belongs_to :profile
validates :user_id, presence: true
validates :profile_id, presence: true
private
def number_of_roles
unless Role.where(user_id: user_id).count >= 2
errors[:base] << 'Usuário precisa ter pelo menos um perfil'
false
end
end
end
除了在我的视图中没有弹出的错误[:base]行之外,这是正常的。我试过这个没有:base,使用:user_id字段,而不是add_to_base(不推荐使用),没有任何效果。
我倾向于说这是由于redirect_to在控制器中完成,但是,我无法找到如何做到这一点。
有什么建议吗?
非常感谢。