J'essaie de comprendre comment implémenter un modèle d'évaluation dans mon application Rails 4.Évaluation - associations polymorphes sur la boucle de rétroaction
Je l'ai déjà posé ces questions liées, mais je suis encore à résoudre ce problème:
Rails 4 Polymorphic associations and concerns
Rails 4 - post completion evaluations model - structure
Je:
class Evaluation < ActiveRecord::Base
belongs_to :evaluator, :polymorphic => true
belongs_to :evaluatable, :polymorphic => true
J'ai aussi fait des préoccupations pour évaluateur et évaluable en tant que:
module Evaluator
extend ActiveSupport::Concern
included do
has_many :given_evaluations, as: :evaluator, dependent: :destroy, class_name: 'Evaluation'
end
end
module Evaluatable
extend ActiveSupport::Concern
included do
has_many :received_evaluations, as: :evaluatable, dependent: :destroy, class_name: 'Evaluation'
end
end
J'ai inclus chaque préoccupation dans mon modèle d'utilisateur:
class User < ActiveRecord::Base
include Evaluator
include Evaluatable
Dans ma page show, je veux montrer une des évaluations d'un utilisateur particulier (reçues d'autres utilisateurs -Qui sont évaluateurs).
Dans mon show, j'ai.
<% Evaluation.find(params[:id]).received_evaluations.order('created_at DESC').each do |eval| %>
<div id="portfolioFiltering" class="masonry-wrapper row">
<%= eval.remark %>
<%= eval.personal_score %>
<small><%= eval.created_at %></small>
Dans ma forme d'évaluations, je "ne suis pas sûr de savoir comment désigner le destinataire de l'évaluation que je l'ai fait la forme de base, mais je ne suis pas clair . sur la façon de l'attacher à l'utilisateur qui doit recevoir l'évaluation
<%= simple_form_for(@evaluation) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :score, collection: 1..10, autofocus: true, :label => "How do you rate this experience (1 being did not meet expectations - 10 being met all expectations) ?" %>
<%= f.input :remark, as: :text, :label => "Evaluate your project experience", :input_html => {:rows => 10} %>
Ma table évaluations a:
t.integer "user_id"
t.integer "evaluatable_id"
t.string "evaluatable_type"
t.integer "overall_score"
t.integer "project_score"
t.integer "personal_score"
t.text "remark"
t.boolean "work_again?"
t.boolean "continue_project?"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
add_index "evaluations", ["evaluatable_type", "evaluatable_id"], name: "index_evaluations_on_evaluatable_type_and_evaluatable_id", unique: true, using: :btree
Dans mon contrôleur utilisateurs, j'ai:
def show
# authorize! :read, @user
@received_evaluations = @user.received_evaluations
end
Je reçois actuellement une erreur qui dit:
undefined method `received_evaluations' for #<Evaluation:0x007fb8c4b32160>
Je ne sais pas ce que signifie ce message ou comment le résoudre.
Si je change le spectacle:
<% @user.received_evaluations.each do |eval| %>
Je reçois cette erreur:
undefined method `received_evaluations' for nil:NilClass
Lorsque j'essaie cela, je crée une nouvelle évaluation et j'obtiens une erreur qui indique: Impossible de trouver l'utilisateur avec 'id' = 3. Chaque fois que j'en fais un nouveau, le nombre augmente de 1. Je ne pense pas que ce sont des identifiants d'utilisateur, mais plutôt des identifiants d'évaluation. Je ne suis pas sûr de ce qui ne va pas ici. – Mel
les actions ci-dessus sont dans le contrôleur d'évaluation. Dois-je ajouter quelque chose au contrôleur des utilisateurs pour que cela fonctionne? – Mel