我不认为我需要问这个,但是这里有。我有一个应用程序,允许您签出,签入和设置书籍提醒,例如,这是通过单击check_box完成。因此,如果User1例如检出Book1,则该用户在查看时将只能看到签入按钮。然后,如果同一用户检查该书,那么结帐按钮将重新出现
然后是user2,他们查看同一本书,理论上不应该看到除了提醒我按钮之外的任何按钮(这在用户手册重新检入时会发送电子邮件)。
然而,使用当前设置,user2仍然可以看到结帐按钮,但已经勾选为true,这在状态方面是正确的,但我不希望显示该按钮。
这是我到目前为止(提醒我按钮的逻辑不会呈现任何内容)
<% unless current_user.id == @book.user_id %>
<%= render 'shared/checkout' %>
<% end %>
<% if current_user.id == @book.user_id %>
<%= render 'shared/checkin' %>
<% end %>
<% if @book.user_id != nil && current_user.id != @book.user_id %>
<% render 'shared/registerinterest' %>
<% end %>
此外,当用户在书中检查这是我传递给模型时,我认为零值可能导致问题?
<%= form_for @book do |f| %>
<%= f.label :checked_out, "Check Book Back In" %>
<%= f.check_box :checked_out, {checked: false}, false %>
<%= f.hidden_field :user_id, :value => nil %>
<%= f.submit 'Check In' %>
<% end %>
似乎无法理解这种情况,所以如果有人可以解释为什么那么这将是很好的,因为我可以从中学习
谢谢
修改
我现在尝试使用基于anser的注册按钮
<% if @book.checked_out == true && current_user.id != @book.user_id %>
<% render 'shared/registerinterest' %>
<% end %>
然而这不起作用?
答案 0 :(得分:2)
那么,
代码
<% unless current_user.id == @book.user_id %>
与以下相同:
<% if current_user.id != @book.user_id %>
因此,由于user2 id为2,它确实会与用户的id(即1)不同, 它会显示结账部分。
我的消息是在数据库中添加一个布尔字段,通知该书是否已经签出,
<% if current_user.id == @book.user_id %>
<%= render 'shared/checkin' %>
<% elsif @book.checked_out == false %>
<%= render 'shared/checkout' %>
<% else %>
#If it goes into this branch of the if/elsif/else, it means that
# current_user.id != @book.user_id and checked_out == true
<%= render 'shared/registerinterest' %>
<% end %>
然后你必须实现一些东西,当有人签出书时,将checked_out设置为true。
编辑:包括最后的其他内容。