2016-06-12 5 views
0

私はレール評価モデルを設定して、ユーザーが他のユーザーにフィードバックを残すために使用する方法を理解するのに苦労しています。Rails - ユーザーによるユーザーへのフィードバック - フィードバックの表示

私はこの記事では私の問題の重要な部分を概説:

Rails - feedback on specific users, how to set up the form to identify relevant users

私はそれから受け取った提案は、次のようにモデルを設定することでした:

User.rb

has_many :given_evaluations, foreign_key: :evaluator_id, dependent: :destroy, class_name: Evaluation 
    has_many :received_evaluations, foreign_key: :evaluatee_id, dependent: :destroy, class_name: Evaluation 

評価.rb

belongs_to :evaluator, foreign_key: :evaluator_id, class_name: User 
    belongs_to :evaluatee, foreign_key: :evaluatee_id, class_name: User 

評価コントローラー

class EvaluationsController < ApplicationController 
    before_action :set_evaluation, only: [:show, :edit, :update, :destroy] 
    # before_filter :get_user, only: [:show, :edit, :update, :destroy] 

    # GET /evaluations 
    # GET /evaluations.json 
    def index 
    # @evaluations = Evaluation.all 
    @given_evaluations = current_user.given_evaluations 
    @received_evaluations = current_user.received_evaluations 
    end 




    # GET /evaluations/1 
    # GET /evaluations/1.json 
    def show 
    # @received_evaluations = @user.received_evaluations 
    @evaluation = current_user.received_evaluations.find_by(id: params[:id]) || current_user.given_evaluations.find(params[:id]) 

    # @received_evaluation = current_user.received_evaluations.find params[:id] 
    end 

    # GET /evaluations/new 
    def new 
    @evaluation = Evaluation.new 
    end 

    # GET /evaluations/1/edit 
    def edit 
    end 

    # POST /evaluations 
    # POST /evaluations.json 
    def create 
    # @evaluation = Evaluation.new(evaluation_params) 
    @evaluation = current_user.given_evaluations.build(evaluation_params) 

    respond_to do |format| 
     if @evaluation.save 
     format.html { redirect_to @evaluation, notice: 'Evaluation was successfully created.' } 
     format.json { render :show, status: :created, location: @evaluation } 
     else 
     format.html { render :new } 
     format.json { render json: @evaluation.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # PATCH/PUT /evaluations/1 
    # PATCH/PUT /evaluations/1.json 
    def update 
    current_user.given_evaluations.find(params[:id]) 
    respond_to do |format| 
     if @evaluation.update(evaluation_params) 
     format.html { redirect_to @evaluation, notice: 'Evaluation was successfully updated.' } 
     format.json { render :show, status: :ok, location: @evaluation } 
     else 
     format.html { render :edit } 
     format.json { render json: @evaluation.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /evaluations/1 
    # DELETE /evaluations/1.json 
    def destroy 
    current_user.given_evaluations.find(params[:id]) 
    @evaluation.destroy 
    respond_to do |format| 
     format.html { redirect_to evaluations_url, notice: 'Evaluation was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_evaluation 
     @evaluation = Evaluation.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def evaluation_params 
     params[:evaluation].permit(:overall_score, :project_score, :personal_score, :remark, :work_again?, :continue_project?, :evaluatee_id) 
    end 
end 

評価フォーム

<%= simple_form_for(@evaluation) do |f| %> 
    <%= f.error_notification %> 

    <div class="form-inputs"> 
    <%= f.select :evaluatee_id, User.all.map{|u| [u.formal_name, u.id]} %> 

    <%= f.input :overall_score, collection: 1..10, autofocus: true, :label => "How do you rate this project experience (1 being did not meet expectations - 10 being met all expectations) ?" %> 
    <%= f.input :continue_project?, as: :boolean, checked_value: true, unchecked_value: false, :label => "Do you intend to continue working on the project?" %> 
    <%= f.input :remark, as: :text, :label => "Evaluate your experience", :input_html => {:rows => 10} %> 



    </div> 

    <div class="form-actions"> 
    <%= f.button :submit %> 

評価ショービュー

<% @received_evaluations.each do |receval| %> 
           <div id="portfolioFiltering" class="masonry-wrapper row"> 
             <%= receval.remark %> 
             <%#= eval.personal_score %> 
             <small><%= receval.created_at %></small> 
           </div>  
          <% end %> 

評価ショービューで代替しようと

<% @given_evaluations.each do |receval| %> 
           <div id="portfolioFiltering" class="masonry-wrapper row"> 
             <%= receval.remark %> 
             <%#= eval.personal_score %> 
             <small><%= receval.created_at %></small> 
           </div>  
          <% end %> 

私が今抱えている問題は関係なく、私はショーに与えられた評価や受信した評価を表示しようとするかどうかの、私が言うエラーメッセージを得ることです:

undefined method `each' for nil:NilClass 

私はどのように把握することはできませんがユーザーが別のユーザーを評価できるようにモデルをセットアップします。私は各ユーザーの評価をそれぞれのショーページに表示したいと思います。私は何がうまくいかないのか分からない。コンソールから、ユーザーが評価を受け取ったことがわかります。

=> #<Evaluation id: 8, evaluatee_id: 34, overall_score: 4, project_score: 5, personal_score: 5, remark: "jhjkhjhjkhkjhjkhjhkhjhkj", work_again?: nil, continue_project?: nil, created_at: "2016-06-12 21:52:53", updated_at: "2016-06-12 21:52:53", evaluator_id: 34> 

私は現在作業しているユーザーのエントリがあります。しかし、私はその評価を示す方法を見つけることができません。

答えて

0

私が見ることができる最も当面の問題は、インスタンス変数ということです:@given_evaluations@received_evaluationsがあなたのショーのアクションで設定されていないとコメントした部分は、したがって、あなたができなかった理由を1つのインスタンスを返しますActiveRecord#find方法を、使用しています評価をループします。

あなたのユーザーの評価をすべて表示するには、indexアクションを実行することをお勧めします。すでに行っているように、ショーの現在のロジックをインデックスビューに移動することができます。

@evaluation = current_user.received_evaluations.find(params[:id])

次に、あなたのshowビューで、あなたのような何かを持っている必要があります:

<div id="portfolioFiltering" class="masonry-wrapper row"> 
    <%= @evaluation.remark %> 
    <%= @evaluation.personal_score %> 
    <small><%= @evaluation.created_at %></small> 
</div> 
を、あなたはどうしたら、 show行動上の各ユーザーの受信した評価を表示するには
関連する問題