Mohit Harshan
Mohit Harshan

Reputation: 1986

Append a key to all objects in array

I'm trying to add a key to existing array of objects.

  session = Session.where(:session_id => events_params[:session_id])

  events_params[:events].each do |event|
      event[:session_id] = session.ids
  end
  puts events_params[:events]

Even after assigning this session_id , the event_params[:events] still doesn't contain session_id in any objects as seen from the puts statement. What am I doing wrong?

Upvotes: 0

Views: 618

Answers (2)

Manjunath P
Manjunath P

Reputation: 433

It appears like events_params[:events] is an empty array. Hence the .each cannot point to any elements inside an empty array.

You can use Array#push() here.

event_params[:events] << {:session_id => [1, 2, 3]}

or

event_params[:events].push({:session_id => [1, 2, 3]})

Otherwise, if you prefer to use .each. You can initialize the array beforehand.

event_params[:events] = [{:session_id => nil}]

Upvotes: 0

mechnicov
mechnicov

Reputation: 15248

You can change your params

params.dig(:data, :events)&.each { |event| event[:session_id] = session.ids }

After that you can call events_params

Don't forget to permit that params

def events_params
  params.require(:data).permit(
    :session_id,
    :user_identifier,
    :user_email,
    :auth_token,
    events: [
      :event_type,
      :timestamp,
      :session_id,
      data: {},
    ],
  )
end

Upvotes: 2

Related Questions