私はこれを尋ねる必要があるとは思いませんでしたが、ここに行きます。たとえば、本のチェックアウト、チェックイン、リマインダーの設定を可能にするアプリがあります。これは、check_boxをクリックすることで実行できます。したがって、たとえばUser1がBook1をチェックアウトした場合、そのユーザーは表示時にのみチェックインボタンを表示できます。そして、同じユーザーがその本をチェックインすると、チェックアウトボタンが再び表示されます
次にuser2が来ます。彼らは同じ本を表示し、理論的にはuser1によるremind meボタン(これは本がチェックインされたときに電子メールを送信します)以外のボタンを表示できないはずです。
ただし、現在の設定では、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 %>
また、ユーザーが本をチェックインすると、これがモデルに渡されます。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 %>
しかし、これは機能していませんか?