在erb文件中使用if语句
问题描述:
我是Ruby on Rails的新成员,正在构建一个论坛的示例项目。我尝试设置一个可以删除其他管理员的超级管理员。但总是不能通过规范。在erb文件中使用if语句
这里是我的代码 的意见/用户/ _user.html.erb
<li>
<%= gravatar_for user, size: 52 %>
<%= link_to user.name, user %>
<% if (current_user.admin? && !current_user?(user) && !user.admin?) || current_user.sadmin? %>
| <%= link_to "delete", user, method: :delete,
data: { confirm: "You sure?" } %>
<% end %>
</li>
规格/请求/ user_page_spec
describe "delete links" do
it { should_not have_link('delete') }
describe "as an admin user" do
let(:admin) { FactoryGirl.create(:admin) }
before do
sign_in admin
visit users_path
end
it { should have_link('delete', href: user_path(User.first)) }
it "should be able to delete another user" do
expect do
click_link('delete', match: :first)
end.to change(User, :count).by(-1)
end
it { should_not have_link('delete', href: user_path(admin)) }
end
describe "as an sadmin user" do
let(:sadmin) { FactoryGirl.create(:sadmin) }
let(:admin) {FactoryGirl.create(:admin)}
before do
sign_in sadmin
visit users_path
end
it { should have_link('delete', href: user_path(User.first)) }
it "should be able to delete another user" do
expect do
click_link('delete', match: :first)
end.to change(User, :count).by(-1)
end
it { should have_link('delete', href: user_path(admin))}
it { should_not have_link('delete', href: user_path(sadmin)) }
end
end
end
,当我尝试运行规范的错误是
1) User pages index delete links as an sadmin user
Failure/Error: it { should_not have_link('delete', href: user_path(sadmin)) }
expected #has_link?("delete", {:href=>"https://stackoverflow.com/users/422"}) to return false, got true
# ./spec/requests/user_pages_spec.rb:66:in `block (5 levels) in <top (required)>'
2) User pages index delete links as an sadmin user
Failure/Error: it { should have_link('delete', href: user_path(admin))}
expected #has_link?("delete", {:href=>"https://stackoverflow.com/users/423"}) to return true, got false
# ./spec/requests/user_pages_spec.rb:65:in `block (5 levels) in <top (required)>'
我不确定它是否意味着我在erb文件中使用的语法是错误的或者其他一些东西我乱编辑?在此先感谢
答
在
<% if (current_user.admin? && !current_user?(user) && !user.admin?) || current_user.sadmin? %>
| <%= link_to "delete", user, method: :delete,
data: { confirm: "You sure?" } %>
<% end %>
,意味着如果“current_user.sadmin?”为真,链接将显示无论其他条件。所以疗法是失败
Failure/Error: it { should_not have_link('delete', href: user_path(sadmin)) }
expected #has_link?("delete", {:href=>"https://stackoverflow.com/users/422"}) to return false, got true
我猜
it { should have_link('delete', href: user_path(admin))}
失败,是监守管理员用户在
it "should be able to delete another user" do
expect do
click_link('delete', match: :first)
end.to change(User, :count).by(-1)
end
部分被删除了?
+0
嗨,谢谢你的回复,我修复了这个错误,其他文件出错了......谢谢! – user3312479
不,语法没问题。 '失败'意味着测试中的期望未被满足,而不是代码未能执行。当你在'sadmin'用户上拨打'admin'时会发生什么?它是“真”还是“假”? –