2

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

1 Answer 1

9

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.

Sign up to request clarification or add additional context in comments.

1 Comment

Hey mate thanks for the help, im new using the render method, im refactoring the code anyway, many thannks

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.