簡體   English   中英

Rails如何迭代has_one呢?

[英]Rails how iterate has_one though?

這是方案:

因此,該產品與反饋沒有任何關系,但是訂單與該反饋有關,我想將反饋顯示為屬於產品

model FEEDBACK

 has_one :order
 has_one :product, through: :order 

model ORDER

  belongs_to :product, touch: true
  belongs_to :feedback

model PRODUCT


  has_many :feedbacks
  has_many :orders

我想循環獲得產品的反饋

舉個例子

controller HOME


    @total_feedbacks = Feedback.joins(:product).where('products.id = ?', @product.id).where('buyer_feedback_date is not null').count


    @average_rating_from_buyers = Feedback.joins(:product).where('products.id = ?', @product.id).where('buyer_feedback_date is not null').rated(Feedback::FROM_BUYERS).average(:buyer_rating)






view HOME



  <table id="posts" class="product_table">
        <tbody class="page">
          <tr>
            <% @products.last(22).each do |product|%>

              <td>
                <%=link_to product_path(product.id), :class=>"product" do %>

                  <span class="productName">
                    <%=product.name %></span>
                  <span class="price"><%=number_to_currency(product.price, :unit=> "R$") %></span>


              <% if product.vitrine.feedbacks.present? %>
                    <div class="productFeeback">
                      <div><%= @average_rating_from_buyers %>"></div>
                      <%=@total_feedbacks %>
                    </div>
                  <% end %>

                <% end %>
              </td>
            <% end %>
          </tr>



        </tbody>
      </table>

有了這個代碼,我得到

nil:NilClass的未定義方法'id'

有人有保留的提示嗎? 謝謝

在您的產品模型上,嘗試:

has_many :feedbacks, through: :orders

對於“未定義的方法ID”錯誤,如果可以包含更多的堆棧跟蹤信息,則將有所幫助。

僅基於示例代碼,我認為它將必須在控制器中發生。 @ product.id被引用,但是我看不到@product被設置。

暫無
暫無

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

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