Reputation: 553
I am having real difficulty referencing messages within this hash.
[
{
"MessageThreadID": 1,
"CustomerID": 171,
"MessageType": 1,
"Subject": "Test Message",
"OpenDate": "2015-09-17T00:00:00",
"Closed": false,
"ClosedDate": null,
"Messages": [
{
"IBMessageID": 1,
"MessageThreadID": 1,
"MessageText": "Test Message",
"FromCustomer": true,
"UserID": null,
"Date": "2015-09-17T17:23:00"
},
{
"IBMessageID": 2,
"MessageThreadID": 1,
"MessageText": "Test this Update",
"FromCustomer": false,
"UserID": 1,
"Date": "2015-09-17T17:23:00"
},
{
"IBMessageID": 3,
"MessageThreadID": 1,
"MessageText": "My New Message",
"FromCustomer": false,
"UserID": 1,
"Date": "2015-09-17T17:23:00"
},
{
"IBMessageID": 4,
"MessageThreadID": 1,
"MessageText": "Reply",
"FromCustomer": false,
"UserID": 1,
"Date": "2015-09-17T17:05:00"
},
{
"IBMessageID": 5,
"MessageThreadID": 1,
"MessageText": "Some sensible shit",
"FromCustomer": false,
"UserID": 1,
"Date": "2015-09-17T17:23:00"
},
{
"IBMessageID": 14,
"MessageThreadID": 1,
"MessageText": "Message 2",
"FromCustomer": true,
"UserID": null,
"Date": "2015-09-21T14:10:00"
},
{
"IBMessageID": 16,
"MessageThreadID": 1,
"MessageText": "Message 2",
"FromCustomer": true,
"UserID": null,
"Date": "2015-09-22T16:22:00"
},
{
"IBMessageID": 25,
"MessageThreadID": 1,
"MessageText": "Added via abacus\r\n",
"FromCustomer": false,
"UserID": 1,
"Date": "2015-09-22T16:22:00"
},
{
"IBMessageID": 26,
"MessageThreadID": 1,
"MessageText": "sdsdsdsd",
"FromCustomer": true,
"UserID": null,
"Date": "2015-09-22T16:40:00"
},
{
"IBMessageID": 27,
"MessageThreadID": 1,
"MessageText": "test",
"FromCustomer": true,
"UserID": null,
"Date": "2015-09-22T17:02:00"
},
{
"IBMessageID": 28,
"MessageThreadID": 1,
"MessageText": "test",
"FromCustomer": true,
"UserID": null,
"Date": "2015-09-22T17:06:00"
}
]
},
{
"MessageThreadID": 5,
"CustomerID": 171,
"MessageType": 1,
"Subject": "Unit Test Thread",
"OpenDate": "2015-09-21T13:11:00",
"Closed": false,
"ClosedDate": null,
"Messages": [
{
"IBMessageID": 12,
"MessageThreadID": 5,
"MessageText": "Test Message",
"FromCustomer": true,
"UserID": null,
"Date": "2015-09-21T13:11:00"
}
]
},
{
"MessageThreadID": 11,
"CustomerID": 171,
"MessageType": 0,
"Subject": "Test5",
"OpenDate": "2015-09-22T14:39:00",
"Closed": false,
"ClosedDate": null,
"Messages": [
{
"IBMessageID": 22,
"MessageThreadID": 11,
"MessageText": "Test5",
"FromCustomer": true,
"UserID": null,
"Date": "2015-09-22T14:39:00"
}
]
},
{
"MessageThreadID": 13,
"CustomerID": 171,
"MessageType": 0,
"Subject": "Test6",
"OpenDate": "2015-09-22T14:41:00",
"Closed": false,
"ClosedDate": null,
"Messages": [
{
"IBMessageID": 24,
"MessageThreadID": 13,
"MessageText": "Test6",
"FromCustomer": true,
"UserID": null,
"Date": "2015-09-22T14:41:00"
}
]
},
{
"MessageThreadID": 12,
"CustomerID": 171,
"MessageType": 0,
"Subject": "Test5",
"OpenDate": "2015-09-22T14:41:00",
"Closed": false,
"ClosedDate": null,
"Messages": [
{
"IBMessageID": 23,
"MessageThreadID": 12,
"MessageText": "Test5",
"FromCustomer": true,
"UserID": null,
"Date": "2015-09-22T14:41:00"
}
]
},
{
"MessageThreadID": 14,
"CustomerID": 171,
"MessageType": 1,
"Subject": "Test",
"OpenDate": "2015-09-23T12:24:00",
"Closed": false,
"ClosedDate": null,
"Messages": [
{
"IBMessageID": 29,
"MessageThreadID": 14,
"MessageText": "Test",
"FromCustomer": true,
"UserID": null,
"Date": "2015-09-23T12:24:00"
}
]
},
{
"MessageThreadID": 15,
"CustomerID": 171,
"MessageType": 1,
"Subject": "Accounts Test",
"OpenDate": "2015-09-23T15:35:00",
"Closed": false,
"ClosedDate": null,
"Messages": [
{
"IBMessageID": 30,
"MessageThreadID": 15,
"MessageText": "Accounts Test",
"FromCustomer": true,
"UserID": null,
"Date": "2015-09-23T15:35:00"
}
]
},
{
"MessageThreadID": 16,
"CustomerID": 171,
"MessageType": 2,
"Subject": "Savings ",
"OpenDate": "2015-09-23T15:36:00",
"Closed": false,
"ClosedDate": null,
"Messages": [
{
"IBMessageID": 31,
"MessageThreadID": 16,
"MessageText": "Savings",
"FromCustomer": true,
"UserID": null,
"Date": "2015-09-23T15:36:00"
}
]
},
{
"MessageThreadID": 17,
"CustomerID": 171,
"MessageType": 2,
"Subject": "Savings ",
"OpenDate": "2015-09-23T15:37:00",
"Closed": false,
"ClosedDate": null,
"Messages": [
{
"IBMessageID": 32,
"MessageThreadID": 17,
"MessageText": "Savings",
"FromCustomer": true,
"UserID": null,
"Date": "2015-09-23T15:37:00"
}
]
}
]
My initial call is performed by the following code:
def open_contact_messages(customer_id)
customer_id = @customer.id
response = get_call('/Messages/GetOpenedMessages/' + customer_id.to_s)
response = JSON.parse(response.body)
prettyresponse = JSON.pretty_generate(response)
@openmessages = {}
@openmessages = response.map do |openmessage|
Contact.new(openmessage)
end
return @openmessages
end
The output shown above is from prettyresponse. In my initializer I have the following code. ibmessages is my attempt at referencing the data within messages but i get a cant convert string into integer error.
class Contact
attr_accessor :message_customer_ID, :message_type, :message_subject, :message_text, :message_source, :message_thread_ID
attr_reader :messages
def initialize(options)
@message_customer_ID = options['CustomerID'].to_s
@message_type = options['MessageType'].to_s
@message_subject = options['Subject'].to_s
@message_source = options['Closed'].to_s
@message_thread_ID = options['MessageThreadID'].to_s
@messages = options['Messages']
end
end
In my view I can output the entire hash but referencing the messages hash is proving difficult.
- open_contact_messages(@customer.id).each do |openmessage|
.message-container
%p.message-intro
Filler said....
.message
%h4.message-header.message-contents= "Message Subject : #{openmessage.message_subject}"
%p.message-body.message-text= "Message Text : #{openmessage.message_text}"
%p.message-body.message-source= "Message Source : #{openmessage.message_source}"
%p.message-body.message-thread-ID= "Message Thread ID #{openmessage.message_thread_ID}"
%p.message-body.message-thread-ID= "Message Test"
%p.message-body.message-thread-ID
- openmessage.messages do |message|
= message['MessageText']
I am getting a variety of errors based on the many approaches I have found online but no solution. The most common error is cannot convert integer to string.
Upvotes: 0
Views: 73
Reputation: 7482
What you have here is an array of arrays, i.e. you have a bunch of message threads, each of them contains a bunch of messages.
With this code
@openmessages = response.map do |openmessage|
Contact.new(openmessage)
end
you create a Contact
instance, and provide it a message thread, i.e. this part:
{
"MessageThreadID": 1,
"CustomerID": 171,
"MessageType": 1,
"Subject": "Test Message",
"OpenDate": "2015-09-17T00:00:00",
"Closed": false,
"ClosedDate": null,
"Messages": [ ... ]
}
In your constructor, you may directly assign from options
hash only keys listed above, i.e.
@message_customer_ID = options['CustomerID'].to_s # ok
@message_type = options['MessageType'].to_s # ok
@message_subject = options['Subject'].to_s # ok
@message_text = options['MessageText'].to_s # not ok
@message_source = options['Closed'].to_s # ok
@message_thread_ID = options['MessageThreadID'].to_s # ok
@messages = options['Messages'].to_s # not ok
@ibmessages = options['Messages']['IBMessageID'].to_s # not ok
Messages
key contains an array of messages, so you can't just convert them to string, but instead you need to store them as array, so you may process them further.
If you want to output an array of your messages, you need to change @messages
assigning to an array, like this:
@messages = options['Messages']
Add a reader method to your Contact
class:
class Contact
attr_reader :messages
end
And after that you can use this reader in your view:
- openmessage.messages do |message|
= message['MessageText']
Please, note to use -
in front of openmessage.messages do |message|
line, exactly as in my code above, and not =
. The difference between them is that =
writes the result to the buffer (i.e. outputs something), while -
just runs some ruby code. In this context you don't want to write whole openmessage.messages
array in your view in a serialized form, but instead to process it in a loop.
Upvotes: 1