Reputation: 1986
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
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
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