Ruby on rails 在rails中实现pundit gem的问题
我的错误消息说,我一直试图在rails中使用权威宝石,但它没有出现在我的索引页面中,也不知道为什么Ruby on rails 在rails中实现pundit gem的问题,ruby-on-rails,ruby,Ruby On Rails,Ruby,我的错误消息说,我一直试图在rails中使用权威宝石,但它没有出现在我的索引页面中,也不知道为什么 1) Error: DeletingAPost Feature Test#test_0001_delete the post: Capybara::ElementNotFound: Unable to find link or button "Destroy" /Users/cheatermoves/.rvm/gems/ruby-2.0.0-p247/gems/capybara-2.1.0
1) Error:
DeletingAPost Feature Test#test_0001_delete the post:
Capybara::ElementNotFound: Unable to find link or button "Destroy"
/Users/cheatermoves/.rvm/gems/ruby-2.0.0-p247/gems/capybara-2.1.0/lib/capybara/node/finders.rb:41:in `block in find'
/Users/cheatermoves/.rvm/gems/ruby-2.0.0-p247/gems/capybara-2.1.0/lib/capybara/node/base.rb:81:in `synchronize'
/Users/cheatermoves/.rvm/gems/ruby-2.0.0-p247/gems/capybara-2.1.0/lib/capybara/node/finders.rb:30:in `find'
/Users/cheatermoves/.rvm/gems/ruby-2.0.0-p247/gems/capybara-2.1.0/lib/capybara/node/actions.rb:13:in `click_link_or_button'
/Users/cheatermoves/.rvm/gems/ruby-2.0.0-p247/gems/capybara-2.1.0/lib/capybara/session.rb:354:in `block (2 levels) in <class:Session>'
/Users/cheatermoves/.rvm/gems/ruby-2.0.0-p247/gems/capybara-2.1.0/lib/capybara/dsl.rb:51:in `block (2 levels) in <module:DSL>'
/Users/cheatermoves/newHW/Portfolio/test/features/post_delete_post_test.rb:7:in `block (2 levels) in <top (required)>'
这是我的索引html贴子页面的副本
<h1>Listing posts</h1>
<table>
<tr>
<th>Title</th>
<th>Content</th>
<th></th>
<th></th>
<th></th>
</tr>
<% @posts.each do |post| %>
<tr id="<%= dom_id(post) %>">
<td><%= post.title %></td>
<td><%= post.content %></td>
<td><%= link_to 'Show', post %></td>
<% if policy(post).update? %>
<td><%= link_to 'Edit', edit_post_path(post) %></td>
<% end %>
<% if policy(post).destroy? %>
<td><%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %></td>
<% end %>
</tr>
<% end %>
</table>
<%= link_to 'New Post', new_post_path %>
这是我的政策页面的副本
class ApplicationPolicy
attr_reader :user, :record
def initialize(user, record)
raise Pundit::NotAuthorizedError, "must be logged in" unless user
@user = user
@record = record
end
def index?
false
end
def show?
scope.where(:id => record.id).exists?
end
def create?
false
end
def new?
create?
end
def update?
false
end
def edit?
update?
end
def destroy?
false
end
def scope
Pundit.policy_scope!(user, record.class)
end
end
class PostPolicy < ApplicationPolicy
class Scope < Struct.new(:user, :scope)
def resolve
scope
end
end
end
我与Desive一起安装的用户模型和我的posts模型
class User < ActiveRecord::Base
attr_accessible :role, :published
def author?
role == 'author'
end
def editor?
role == 'editor'
end
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me
# attr_accessible :title, :body
has_many :posts, foreign_key: "author_id"
end
class Post < ActiveRecord::Base
attr_accessible :content, :title
belongs_to :author, class_name: "User"
def publish!
published = true
save!
end
end
还有我的管理员
对不起,搞清楚这一点对我来说就像是在干草堆里捞针。有人能给我指出正确的方向吗 您注销了LimeChat,所以我无法现场回答您的问题,添加到视图中的逻辑是,它们应该只为应该有权访问这些操作的用户填充。因此,您可以尝试让您的测试登录用户成为一个编辑器装置,因为从理论上讲,他们是应该看到这些按钮填充的唯一用户 很抱歉在旧帖子上回复,但对于这一点,你的答案是什么?策略自动为假您没有销毁?因此,在post策略中,您退回到ApplicationPolicy,因此无论用户是谁,都不会创建“删除”按钮