2017-11-09 3 views
0

필자는 철저하고 레일스에서 ​​루비를 처음 사용하고 있습니다. 멋진 리뷰에서 '리뷰'를 클릭하는 중에 오류가 발생합니다.NoMethodError in Spree :: Admin :: Reviews # index

미리 감사드립니다. var에/lib 디렉토리/보석/2.3.0/루비/2.3.0/들러/보석/spree_reviews-e51cae9627f9/응용 프로그램 /보기/마구 - : 관리자 : 야단법석에서

NoMethodError은 # 지수를

상영 리뷰 /admin/reviews/index.html.erb 라인 # 25 제기 여기서

enter image description here

index.html.erb :

<% content_for :page_title do %> 
<%= Spree.t('reviews') %> 
<% end %> 
<% render 'spree/admin/shared/product_sub_menu' %> 
<% content_for :table_filter_title do %> 
<%= Spree.t('search') %> 
<% end %> 
<% content_for :table_filter do %> 
<div data-hook="admin_reviews_index_search"> 

<%= search_form_for [:admin, @search] do |f| %> 
    <div class="alpha three columns"> 
     <div class="field"> 
      <%= label_tag nil, Spree.t(:user) %><br /> 
      <%= f.text_field :name_cont, :size => 25 %> 
     </div> 
    </div> 

    <div class="seven columns"> 
     <div class="field"> 
      <%= label_tag nil, Spree.t(:title) -%><br/> 
      <%= f.text_field :title_cont, :size => 25 -%> 
     </div> 
    </div> 

    <div class="four columns"> 
     <div class="field"> 
      <%= label_tag nil, Spree.t(:review) -%><br/> 
      <%= f.text_field :review_cont, :size => 25 -%> 
     </div> 
    </div> 

    <div class="two columns omega"> 
     <div class="field"> 
      <%= label_tag nil, Spree.t(:approval_status)-%><br/> 
      <%= f.select :approved_eq, [[Spree.t('all'), nil], 
    [Spree.t('approved_reviews'), true], 
    [Spree.t('unapproved_reviews'),false]] -%> 
    </div> 
    </div> 

    <div class="clear"></div> 

    <div class="form-buttons actions filter-actions" data- 
     hook="admin_reviews_index_search_buttons"> 
     <%= button Spree.t(:search), 'icon-search' %> 
     </div> 
     <%- end -%> 
    </div> 
    <%- end -%> 

<% paginate @reviews %> 

<% if @reviews.any? %> 
<table class="index"> 
    <colgroup> 
     <col style="width: 25%;"> 
     <col style="width: 10%;"> 
     <col style="width: 10%;"> 
     <col style="width: 20%;"> 
     <col style="width: 15%;"> 
     <col style="width: 17%;"> 
    </colgroup> 
    <thead> 
     <tr> 
      <th><%= Spree.t('product') %></th> 
      <th><%= Spree::Review.human_attribute_name(:rating) %></th> 
      <th><%= Spree.t('feedback') %></th> 
      <th><%= Spree::Review.human_attribute_name(:user) %></th> 
      <th><%= Spree::Review.human_attribute_name(:created_at) %></th> 
     </tr> 
    </thead> 
    <tbody> 
    <%- @reviews.each do |review| -%> 
     <tr id="<%= dom_id review %>"> 
      <td> 
       <% if review.product %> 
        <%= link_to review.product.name, product_path(review.product) %> 
       <% end %> 
      </td> 
      <td class="align-center"> 
       <%= txt_stars(review.rating) %> 
      </td> 
      <td class="align-center"> 
       <%= link_to "(#{review.feedback_stars}/#{review.feedback_reviews.size})", admin_review_feedback_reviews_path(review) %> 
      </td> 
      <td class="align-center"> 
       <%= review.user_id ? link_to(review.user.try(:email), [:admin, review.user]) : Spree.t(:anonymous) %></p> 
       <p><%= Spree::Review.human_attribute_name(:ip_address) %>: <%= review.ip_address ? link_to(review.ip_address, "http://whois.domaintools.com/#{review.ip_address}") : '-' %></p> 
      </td> 
      <td class="align-center"> 
       <%= l review.created_at, :format => :short %> 
      </td> 
      <td class="actions"> 
       <%= link_to_with_icon 'check', Spree.t('approve'), approve_admin_review_url(review), :no_text => true, class: 'approve' unless review.approved %> 
       &nbsp; 
       <%= link_to_edit review, :no_text => true, :class => 'edit' %> 
       &nbsp; 
       <%= link_to_delete review, :no_text => true %> 
      </td> 
     </tr> 
    <% end %> 
    </tbody> 
</table> 
<% else %> 
<div class="no-objects-found"> 
    <%= Spree.t(:no_results) %> 
</div> 
<% end %> 

<%= paginate @reviews -%> 

reviews_controller

더듬다 후 결과 방법을 추가 할 수
class Spree::Admin::ReviewsController < 
Spree::Admin::ResourceController 
helper Spree::ReviewsHelper 
def index 
    @reviews = collection 
    params[:q] ||= {} 
    @search = Spree::Review.ransack(params[:q]) 
    @collection = @search.result.includes([:product, :user, 
    :feedback_reviews]).page(params[:page]).per(params[:per_page]) 
end 
def approve 
r = Spree::Review.find(params[:id]) 

if r.update_attribute(:approved, true) 
    flash[:notice] = Spree.t("info_approve_review") 
else 
    flash[:error] = Spree.t("error_approve_review") 
end 
    redirect_to admin_reviews_path 
end 
def edit 
if @review.product.nil? 
    flash[:error] = Spree.t("error_no_product") 
    redirect_to admin_reviews_path and return 
end 
end 
private 
    def collection 
    params[:q] ||= {} 
    @search = Spree::Review.ransack(params[:q]) 
    @collection = @search.result.includes([:product, :user, 
    :feedback_reviews]).page(params[:page]).per(params[:per_page]) 
    end 
end 

review.rb

class Spree::Review < ActiveRecord::Base 

     belongs_to :product, touch: true 
     belongs_to :user, :class_name => Spree.user_class.to_s 
     has_many :feedback_reviews 

     after_save :recalculate_product_rating, :if => :approved? 
     after_destroy :recalculate_product_rating 

     validates :name, presence: true 
     validates :review, presence: true 

     validates :rating, numericality: { only_integer: true, 
     greater_than_or_equal_to: 1, 
     less_than_or_equal_to: 5, 
     message: Spree.t('you_must_enter_value_for_rating') } 


     default_scope { order("spree_reviews.created_at DESC") } 

     scope :localized, ->(lc) { where('spree_reviews.locale = ?', lc) } 
     scope :most_recent_first, -> { order('spree_reviews.created_at DESC') } 
     scope :oldest_first, -> { reorder('spree_reviews.created_at ASC') } 
     scope :preview, -> { limit(Spree::Reviews::Config[:preview_size]).oldest_first } 
     scope :approved, -> { where(approved: true) } 
     scope :not_approved, -> { where(approved: false) } 
     scope :default_approval_filter, -> { Spree::Reviews::Config[:include_unapproved_reviews] ? all : approved } 

     def feedback_stars 
     return 0 if feedback_reviews.size <= 0 
     ((feedback_reviews.sum(:rating)/feedback_reviews.size) + 0.5).floor 
     end 

     def set_search 
     @search=Product.search(params[:q]) 
     end 

     def recalculate_product_rating 
     self.product.recalculate_rating if product.present? 
     end 
     end 
+0

는'@의 search'의 가치가 어떤 컨트롤러에 어떤 정의이야? –

+0

@ SebastianPalma, @search는 reviews_controller에서 다음과 같이 정의됩니다. params [: q] || = {} @search = Spree :: Review.ransack (params [: q]) – Cliffs

+0

검토에 title_cont 속성이 있습니까? –

답변

0

시도 :

@search = Spree::Review.ransack(params[:q]).result 
+0

'인 경우 '정의되지 않은 메소드'결과 '가 표시됩니다. – Cliffs