Well, first I tried to simply create the intervening object manually, but then
I realized I wanted to know if such an object already existed, so I was going
to do a fetch, but as random client wouldn't know the primary key of the
NoteType, I am not sure how to do that. I could expose the primary key, but
I'd much rather not.
Presumably, the client could simple call the curl commands to create the
intervening object, then add the current object with a second line, but I
wanted to be able to do this in the java itself so the client could do
something like:
curl -X PUT -d "{noteType:{type:'NoteType', name:'Alert'}}"
http://My-MacBook-Pro.local:9001/cgi-bin/WebObjects/MyApp.woa/ra/Device/1/addNoteType.json
Then I would get the device, get the NoteType represented by the
routeObjectForKey("noteType") and set add the noteType to the relationship.
public WOActionResults addNoteTypeAction() {
Device device = Device();
NoteType type = routeObjectForKey("noteType");
// set the relationships and do whatever else
...
However, the routeObjectForKey gets a null value, presumably because there is
no key "noteType" in the Device class. I gather there may be some way to do
this with variable substitution, but again, if I don't know the pk of the
NoteType, I'm confused about how I should be doing this.
Andrew
On Mar 29, 2011, at 2:59 PM, Pascal Robert wrote:
>
> Le 2011-03-29 à 14:52, Andrew Kinnie a écrit :
>
>> Hi again.
>>
>> I have been able to get my ERRest app to create new objects, and with a
>> to-one relationship based on the example app. I note that apparently ERRest
>> (maybe rest in general) does not allow you to add an object to a to-many
>> relationship directly. Apparently you need to first GET the intervening
>> object, or create one if it doesn't exist, then add the object to it from
>> the other side. e.g. with Organization ->> Member, you'd have to get or
>> create the organization, then add the member to it.
>
> I had this "problem" too, but Mike said it should work, and from memory it
> worked for a test case I did, but it didn't work in a specific project and
> the problem seemed to be because of non-model attributes that I had in this
> entity. Sadly, I didn't find the source of the problem before I left my job.
>
>> What I want to do is create an Action method that allows me to look for an
>> existing intervening object based on an attribute, and if one doesn't exist,
>> then create one. Then set that intervening object's relationships back to
>> original object and the pointed to object.
>>
>> So:
>>
>> I have an entity: Device which has a to-many to another entity NoteType
>> (which in turn has a to-many back to Device)
>> There is an intervening entity DeviceNoteType which has a to-one to Device
>> and another to NoteType
>>
>> So in my DeviceController, I want to have an Action method updateNoteTypes
>> and perhaps another addToNoteTypes
>>
>> I see in the wiki that this needs to be done in the two steps mentioned
>> above, but I don't want to require the calling app to do that, but rather do
>> it myself (e.g. passing in json with a name:"myNoteType") and be able to
>> have my method do the necessary fetching and setting.
>>
>> Whenever I try to do this, I get null as the value from routeObjectForKey.
>> Actually, I was getting that anyway, until I called the entity method in the
>> controller (e.g. the device() method in the DeviceController class, then I
>> can access the keys from that device. But that doesn't help here. I looked
>> at the example app and do see any to-manys in there, and I've gone through
>> the screencast from WO-NoVA multiple times. I'm just not seeing it.
>
> Can you post the methods you are using?
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list ([email protected])
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com
This email sent to [email protected]