0

我不认为我需要问这个,但这里有。我有一个应用程序,可以让您在书籍上签出、签入和设置提醒,例如,这是通过单击复选框来完成的。因此,如果 User1 例如签出 Book1,则该用户在查看时只能看到签入按钮。然后,如果同一用户签入该书,则签出按钮将重新出现

然后是用户 2,他们查看同一本书,理论上应该看不到用户 1 的提醒我按钮(当书重新签入时发送电子邮件)之外的任何按钮。

但是,在当前设置下,用户 2 仍然可以看到结帐按钮,但它已经被勾选为 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 %>

此外,当用户在书中查看这是我传递给模型的内容时,我认为 nil 值可能会导致问题?

<%= 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 %>

但是这不起作用?

4

1 回答 1

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 %>

然后你必须实现一些东西,当有人签出这本书时,将 check_out 设置为 true。

edited: included that last else.

于 2013-01-07T14:00:51.720 回答