首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails .协会.用户对用户的反馈.显示反馈

Rails .协会.用户对用户的反馈.显示反馈
EN

Stack Overflow用户
提问于 2016-06-12 22:24:30
回答 1查看 55关注 0票数 0

我很难弄清楚如何建立我的rails评估模型,以便用户可以使用它来给其他用户留下反馈。

我在这篇文章中概述了我问题的关键部分:

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

我从这方面得到的建议是建立以下模式:

User.rb

代码语言:javascript
复制
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

Evaluation.rb

代码语言:javascript
复制
belongs_to :evaluator, foreign_key: :evaluator_id, class_name: User
  belongs_to :evaluatee, foreign_key: :evaluatee_id, class_name: User

评价控制器

代码语言:javascript
复制
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

评价表

代码语言:javascript
复制
<%= 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 %>

评价显示视图

代码语言:javascript
复制
<% @received_evaluations.each do |receval| %>
                                <div id="portfolioFiltering" class="masonry-wrapper row">
                                        <%= receval.remark %>
                                        <%#= eval.personal_score %>
                                        <small><%= receval.created_at %></small>
                                </div>    
                            <% end %>   

评估显示视图的替代尝试

代码语言:javascript
复制
<% @given_evaluations.each do |receval| %>
                                <div id="portfolioFiltering" class="masonry-wrapper row">
                                        <%= receval.remark %>
                                        <%#= eval.personal_score %>
                                        <small><%= receval.created_at %></small>
                                </div>    
                            <% end %>   

我现在遇到的问题是,无论我是试图在节目中显示给定的评估还是接收到的评估,我都会收到一条错误消息,其中写道:

代码语言:javascript
复制
undefined method `each' for nil:NilClass

我不知道如何设置模型,以便用户可以评估另一个用户。我想在他们各自的显示页面上显示每个用户收到的评估。我不知道到底出了什么问题。我从控制台中可以看到,用户收到的评估如下:

代码语言:javascript
复制
=> #<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> 

我正在使用的用户有一个条目。然而,我找不到一个方法来显示这种评价。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-12 22:46:25

我能看到的最直接的问题是实例变量:在显示操作中没有设置@given_evaluations@received_evaluations,而注释部分使用的是ActiveRecord#find方法,这将返回一个实例,因此不能遍历计算结果。

我认为显示所有用户的评估的更好的地方是在index操作中,正如您已经做的那样,您可以将显示的当前逻辑移到索引视图中。要显示每个用户收到的对show操作的评估,您可以这样做:

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

然后,在您的show视图中,您应该有如下内容:

代码语言:javascript
复制
<div id="portfolioFiltering" class="masonry-wrapper row">
  <%= @evaluation.remark %>
  <%= @evaluation.personal_score %>
  <small><%= @evaluation.created_at %></small>
</div> 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37779652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档