2016-04-04 11 views
8

मैं अपने Rails 4 ऐप में Evaluation मॉडल जोड़ने की कोशिश कर रहा हूं।रेल 4 पॉलीमोर्फिक संघ और चिंताओं

मैंने evaluation.rb नामक एक मॉडल बनाया है। यह है: evaluator के लिए

class Evaluation < ActiveRecord::Base 

    belongs_to :evaluator, :polymorphic => true 
    belongs_to :evaluatable, :polymorphic => true 

मैं भी बना दिया है चिंताओं और evaluatable के रूप में:

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 

मैं अपने उपयोगकर्ता मॉडल में प्रत्येक चिंता का विषय शामिल हैं:

class User < ActiveRecord::Base 
    include Evaluator 
    include Evaluatable 

मेरी शो पृष्ठ में, मैं एक विशेष उपयोगकर्ता के मूल्यांकन दिखाना चाहता हूं (अन्य उपयोगकर्ताओं से प्राप्त - जो मूल्यांकनकर्ता हैं)।

मेरे शो में, मेरे पास है:।

<% Evaluation.find(params[:id]).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> 

मेरी मूल्यांकन प्रपत्र में, मैं "यकीन है कि कैसे मूल्यांकन के प्राप्तकर्ता को नामित करने नहीं हूँ मैं मूल रूप बना दिया है, लेकिन मैं स्पष्ट नहीं कर रहा हूँ । उपयोगकर्ता जो मूल्यांकन प्राप्त करना चाहिए करने के लिए इसे टाई करने के लिए कैसे के बारे में

<%= 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} %> 

मेरे मूल्यांकन टेबल है:

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 

प्रश्न

उपयोगकर्ता के मूल्यांकन को दिखाने के लिए मैं शो पेज कैसे सेटअप करूं?

मैं फ़ॉर्म को कैसे अनुकूलित करूं ताकि यह उपयोगकर्ता आईडी को उस व्यक्ति के रूप में निर्दिष्ट कर सके जिसे मूल्यांकन प्राप्त करना चाहिए?

+0

महान प्रश्न और आप अपनी समस्याओं को समझाने में अच्छे हैं .. देखते हैं कि कोई भी – illusionist

+0

में मदद करता है क्या आप उपयोगकर्ताओं के अलावा अन्य वस्तुओं का मूल्यांकन करने के लिए 'मूल्यांकन' का उपयोग करना चाहते हैं? आपके उत्तर पर आधार, उत्तर सरलीकृत किया जा सकता है। –

+0

हां। मैं उन परियोजनाओं का मूल्यांकन करना चाहता हूं जो उपयोगकर्ता – Mel

उत्तर

2

उपयोगकर्ता के मूल्यांकन प्राप्त करने के लिए मैं शो पेज कैसे सेटअप करूं?

आपकी मॉडल चिंताओं को आपकी मदद करनी चाहिए। अपने UsersController#show कार्रवाई में, बस जोड़ने चाल करना चाहिए निम्नलिखित:

@received_evaluations = @user.received_evaluations 

तो आप इसे अपने शो टेम्पलेट में उपयोग कर सकते हैं:

<% @received_evaluations.each do |evaluation| %> 
    // render some view stuff 
<% end %> 

या collection rendering का उपयोग करें।

नोट: Evaluation.find(...) जो वर्तमान में आपके विचार में है नियंत्रक कार्रवाई में रखा जाना चाहिए, इसे देखने में अच्छा अभ्यास नहीं है।

मैं फ़ॉर्म को कैसे अनुकूलित करूं ताकि यह उपयोगकर्ता आईडी को उस व्यक्ति के रूप में निर्दिष्ट कर सके जिसे मूल्यांकन प्राप्त करना चाहिए?

यदि आपने उपयोगकर्ता को पहचान लिया है जो evaluatable के रूप में कार्य करेगा तो आप इसे अपने कंट्रोलर एक्शन या अपने व्यू फॉर्म में सेट कर सकते हैं यदि आपके पास अपने पृष्ठ पर मूल्यांकन करने के लिए उपयोगकर्ताओं की एक सूची है।

नियंत्रक में:

@evaluation.evaluatable_id = user_to_evaluate.id 
@evaluation.evaluatable_type = user_to_evaluate.class.to_s 

या यह सरल बयान करना चाहिए एक ही:

@evaluation.evaluator = user_that_evaluates 
:

@evaluation.evaluatable = user_to_evaluate 

इसी तरह, आप एक ही तरह से मूल्यांकनकर्ता सेट करने के लिए सक्षम होना चाहिए

दृश्य में:

<% @users_to_evaluate.each do |user| %> 
    <%= simple_form_for(Evaluation.new) 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} %> 
     <%= f.hidden_field :evaluator_id, :value => current_user.id %> 
     <%= f.hidden_field :evaluator_type, :value => current_user.class.to_s %> 
     <%= f.hidden_field :evaluatable_id, :value => user.id %> 
     <%= f.hidden_field :evaluatable_type, :value => user.class.to_s %> 
    </div> 
    <% end %> 
<% end %> 
+0

ठीक करते हैं !! बहुत बहुत धन्यवाद मार्क। मैं आज रात कोशिश करूँगा। – Mel

संबंधित मुद्दे