if / else /除非选择Rails

时间:2013-01-07 12:52:51

标签: ruby-on-rails ruby-on-rails-3 if-statement

我不认为我需要问这个,但是这里有。我有一个应用程序,允许您签出,签入和设置书籍提醒,例如,这是通过单击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 %>

然而这不起作用?

1 个答案:

答案 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。

编辑:包括最后的其他内容。