簡體   English   中英

如何為 Rails 中的嵌套資源編寫此條件語句?

[英]How do I write this conditional statement for a nested resource in rails?

我有三個模型: User Poll PollItem Vote

一個用戶有很多投票和投票

投票有很多投票項目(嵌套屬性)並且屬於用戶

投票項目有很多票,屬於投票

投票屬於投票項目和用戶

我已經做了一個投票功能,用戶可以投票/取消投票項目。 現在,我正在嘗試編寫一個條件語句,以便用戶能夠對投票中的投票項目進行投票。 例如,如果已經為投票中的第一個投票項目記錄了投票,那么我希望在投票中的其他投票項目上禁用投票鏈接,除了已投票的投票項目。

<% if current_user.votes.where(poll: @poll).count > 0 %>
    display vote link
<% else %>
    remove vote link
<% end %>

但我收到錯誤 SQLite3::SQLException: no such column: votes.poll_id

請也為這個問題提出一個更好的標題。

編輯:

正如@lam 所建議的,我將聲明調整為

<% if user_signed_in? && Vote.where(user_id: current_user.id).where(poll_item_id: @poll.poll_items.pluck(:id)).count > 0 %>
    <p>You have voted</p>
    <%= link_to "Unvote", poll_poll_item_vote_path(@poll, @poll_item), method: :delete %>
<% else %>
    <%= link_to "Vote", poll_poll_item_vote_path(@poll, @poll_item), method: :post %>
<% end %>

但是,該操作已在投票中的所有投票項目上執行。 當我對投票項目進行投票時,其他投票項目的投票鏈接發生了變化,而不是投票項目。

如果Votes belong to poll item and User那么投票應該有poll_item_id ,而不是poll_id 所以我猜邏輯是這樣的:

<% if user_signed_in? && Vote.where(user_id: current_user.id, poll_item_id: @poll_item.id).count > 0 %>
    <p>You have voted</p>
    <%= link_to "Unvote", poll_poll_item_vote_path(@poll, @poll_item), method: :delete %>
<% else %>
    <%= link_to "Vote", poll_poll_item_vote_path(@poll, @poll_item), method: :post %>
<% end %>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM