2016-10-25 1 views
1

ma question semblait être facile au début, mais je ne pouvais pas résolu encore, donc im obtenir des enregistrements de mon DB puis-je ajouter un attribut à chaque de ces enregistrements récupérés. i Essayez de suivre Mon modèleRuby on rails Ajouter un attribut à l'objet existant à partir des dossiers actifs

class Lesson < ActiveRecord::Base 
    attr_reader :palindrome #getter 
    attr_writer :palindrome #setter 
    attr_accessor :palindrome #both 

    belongs_to :schedule 
    belongs_to :user 
    has_one  :schedule 


end 

et dans mon contrôleur im faisant cela pour l'ajouter

def index 
    @lessons = Lesson.select(:id,:start_date,:users_allowed,:name,:users_enrolled).where(start_date: (Time.now.beginning_of_week.beginning_of_day)..Time.now.end_of_week.end_of_day).order(start_date: :desc) 
    @schedules = Array(Schedule.where(user_id: 50).pluck(:lesson_id)) 

    day_id = params[:id].to_i 
    @day_1 = [] 
    @day_2 = [] 
    @day_3 = [] 
    @day_4 = [] 
    @day_5 = [] 
    @day_6 = [] 
    if day_id.present? 
     @lessons.each do |lesson| 
     lesson.palindrome = 'TEST' 
     case lesson.start_date.wday 
      when 1 
      @day_1 << lesson 
      when 2 
      @day_2 << lesson 
      when 3 
      @day_3 << lesson 
      when 4 
      @day_4 << lesson 
      when 5 
      @day_5 << lesson 
      when 6 
      @day_6 << lesson 
     end 
     end 
     case day_id 
     when 1 
     @lessons = @day_1 
     when 2 
     @lessons = @day_2 
     when 3 
     @lessons = @day_3 
     when 4 
     @lessons = @day_4 
     when 5 
     @lessons = @day_5 
     when 6 
     @lessons = @day_6 
     end 
     render json: @lessons 
    end 
    end 

mais im obtenir cette réponse

[ 
    { 
    "id": 7019, 
    "start_date": "2016-10-24T20:30:00.000Z", 
    "users_allowed": 4, 
    "name": "Power - Funcional", 
    "users_enrolled": 2 
    }, 
    { 
    "id": 7018, 
    "start_date": "2016-10-24T20:00:00.000Z", 
    "users_allowed": 4, 
    "name": "Power - Funcional", 
    "users_enrolled": 0 
    }] 

que vous pouvez voir est ne pas retourner le nouvel attribut i fois, mais j'ai essayé en appelant

render json: @lessons[0].palindrome 

et il me revient la valeur de l'attribut, ma question est comment puis-je le faire quand je rends l'objet entier, il renvoie la nouvelle valeur d'attr? Un grand merci

Répondre

1

Vous êtes en train de passer un tableau d'objets ActiveRecord, non hashes. Le convertisseur json analyse les attributs du modèle au lieu des variables personnalisées affectées à ces objets. Essayez de convertir les modèles hash:

lesson = lesson.attributes 
lesson['palindrome'] = 'TEST' 

Voir également refactorisation votre code, je ne pense pas que vous avez besoin de ces déclarations de cas, ni les variables @dayx qui font du mal à comprendre.

+0

Hey mate merci pour l'aide, im nouveau en utilisant la méthode de rendu, im refactoring le code de toute façon, beaucoup thannks – mdiaz00147