Rails 4 - 在redirect_to之后未传播before_destroy时出错

时间:2015-11-29 17:25:58

标签: ruby-on-rails ruby ruby-on-rails-4 model callback

我在用户资源的视图中有此代码。此代码基本上删除了用户的特定角色。基本上,我的模型是这样的:

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在控制器中完成,但是,我无法找到如何做到这一点。

有什么建议吗?

非常感谢。

0 个答案:

没有答案