Ruby on rails add attribute to existing object from active records

object, ruby, ruby-on-rails-4

Solution

You're passing an Array of ActiveRecord objects, not hashes. The json converter will parse of the attributes of the model instead of custom variables assigned to those objects. Try converting the models to hashes:

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

Also consider refactoring your code, I don't think you need those case statements nor the `@dayx` variables which make it hard to understand.

Problem

my issue seemed to be an easy one at first but i could not solved it yet, so im getting some records from my DB and then i need to add an attribute to each of those retrieved records. i Try as follow My model ``` 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 ``` and in my controller im doing this to add it ``` 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 ``` BUT im getting this response ``` [ { "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 }] ``` as you can see is not returning the new attribute i assigned, however i tried by calling ``` render json: @lessons[0].palindrome ``` and it does return to me the value of the attribute, my question is how can i do so when i render the entire object it returns the new attr value ? Many thanks

Original source