Rails - 权威人士未定义的方法'user'



我正在尝试实施一项政策,将帖子的创建限制为管理员或企业。 反过来,只有创建帖子的记录所有者(企业)或管理员可以编辑。但是我收到一个错误,说"未定义的方法用户"有人可以在这里帮忙吗?

Schema.rb

create_table "users", force: true do |t|
    t.string   "name"
    t.string   "email",                  default: "",    null: false
    t.string   "encrypted_password",     default: "",    null: false
    t.string   "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    t.integer  "sign_in_count",          default: 0,     null: false
    t.datetime "current_sign_in_at"
    t.datetime "last_sign_in_at"
    t.string   "current_sign_in_ip"
    t.string   "last_sign_in_ip"
    t.string   "confirmation_token"
    t.datetime "confirmed_at"
    t.datetime "confirmation_sent_at"
    t.string   "unconfirmed_email"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "role"
create_table "posts", force: true do |t|
    t.string   "name"
    t.string   "title"
    t.text     "content"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.integer  "user_id"
  end

用户.rb

def admin?
    role == 'admin'
  end
  def biz?
    role == 'biz'
  end

Post_controller

def edit
    @post = Post.find(params[:id])
     authorize @post
  end

Post.show.html.erb

<% if policy(@post).edit? %>
    <%= link_to 'Edit', edit_post_path(@post) %> |
  <% end %>

应用程序.策略

def create?
    user.present? && ( user.admin? || user.biz?)
  end
  def new?
    create?
  end
  def update?
    user.present? && (record.user == user || user.admin?)
  end
  def edit?
    update?
  end

如果您收到"未定义方法用户"错误,这意味着该用户为 nil,并且您在帖子的显示视图中调用policy(@post).edit?,这意味着它会搜索 post_policy.rb 文件中定义的编辑方法(如果您没有 post_policy.rb 文件,则直接搜索您的 application_policy.rb) def edit?, 这反过来调用 Update 方法def update?最后更新方法被调用为:

def update?
  user.present? && (record.user == user || user.admin?)
end

这意味着用户为 nil,而您正在调用record.user,这就是这里的问题,因为record没有调用任何内容,您需要仔细检查您的帖子模型并确保帖子属于用户

class Post < ActiveRecord::Base
  belongs_to :user
end

最新更新