0

突然,我在提交表单时开始收到此错误。我所做的唯一更改是调用在 ApplicationController 中定义的方法,该方法被标记为 helper。

应用程序/控制器/application_controller.rb

class ApplicationController < ActionController::Base
  protect_from_forgery

  helper_method :is_org_admin?

  #Check if current user is Admin in current organization or not
  def is_org_admin?
    session[:current_organization].is_admin?(current_user)
  end
end

是管理员吗?定义为

class Organization < ActiveRecord::Base
  has_many :memberships
  has_many :users, through: :memberships

  def is_admin?(user)
    member = memberships.where(user_id: user.id).first
    if member.nil?
      false
    else
      member.is_admin?
    end
  end
end

is_org_admin 呢?正在从视图模板调用方法

应用程序/视图/用户/index.html.haml

 %h1 Users
    - if is_org_admin?
      %p= link_to 'Invite new user', new_invitation_path

如果我在 ApplicationController 中删除protect_from_forgery或调用if is_org_admin?index.html.haml 中的辅助方法,它会起作用。但是当我启用protect_from_forgery或调用 ApplicationController 中定义的帮助程序的条件时,它会发出警告并显示您需要登录或注册,然后才能继续在页面上发送消息。

有人可以建议这里有什么问题吗?

4

1 回答 1

0

我没有保存整个组织模型,而是将它的 id 保存在会话中以拥有当前组织的实例。因此,根据需要,我会即时搜索它。

Organization.find(session[:current_organization_id]).is_admin?(current_user)

我仍然想知道如果组织 AR 从会话中保存和使用,为什么它会返回 401。

于 2012-08-21T11:44:39.643 回答