I see primaryKeyField in the docs, maybe try .record(obj.primaryKeyField.is) ?

-Ross

On Jan 19, 2010, at 3:31 PM, Franz Bettag wrote:

> trait Stamped[A <: LongKeyedMapper[A]]
>       extends SkipLogging with KeyedMetaMapper[Long, A] {
> 
>       self: A with MetaMapper[A] with KeyedMapper[Long, A] =>
> 
>       override def afterCreate = (crudLog(_: A, "create")) ::
> super.afterCreate
> 
>       override def afterUpdate = (crudLog(_: A, "update")) ::
> super.afterUpdate
> 
>       override def afterDelete = (crudLog(_: A, "delete")) ::
> super.afterDelete
> 
>       private def crudLog(obj: A, action: String): Unit = {
>               if (!self.skipLogging) {
>                       val log = new ActionLog
>                       log.action(action).klass(obj.getClass.getName).record
> (obj.primaryKey).save
> // Stamped.scala:54: error: value primaryKey is not a member of A
>               }
>       }
> 
> }
> 
> 
> 
> 
> On 19 Jan., 21:22, David Pollak <[email protected]> wrote:
>> You don't need to use structural typing.
>> 
>> Any KeyedMapper has a primaryKey method that returns a Mapped field of the
>> type of the key.  To get the primary key field of a given KeyedMapper
>> instance, just call primaryKey.
>> 
>> 
>> 
>> On Tue, Jan 19, 2010 at 11:55 AM, Ross Mellgren <[email protected]> wrote:
>>> How about structural typing?
>> 
>>> trait Stamped[A <: LongKeyedMapper[A] with { val id: MappedLongIndex[A] }]
>>> ...
>> 
>>> I haven't tried it, but maybe it will work.
>> 
>>> -Ross
>> 
>>> On Jan 19, 2010, at 2:47 PM, Franz Bettag wrote:
>> 
>>>> On 19 Jan., 19:32, David Pollak <[email protected]> wrote:
>>>>>> i am trying to extend my logging trait. The Problem is, i can't say
>>>>>> something like A <: LongKeyedMapper[A] in my trait since ProtoUser
>>>>>> doesn't use IdPK but uses it's own declarations (which look the same
>>>>>> to me).
>> 
>>>>> Why do you need ProtoUser extended with IdPK?  Why can't your trait work
>>>>> with LongKeyedMapper?
>> 
>>>> The code relies on having a .id method on the passed object. The Three
>>>> Traits are below. It works fine with anything having IdPK. At the
>>>> moment i have this code copied into my User singleton which is exactly
>>>> what i want to avoid.
>> 
>>>> I don't know how i would dynamify the use of the .id method. In
>>>> ActionLog and the Stamped trait.
>> 
>>>> trait Stamped[A <: LongKeyedMapper[A] with IdPK]
>>>>       extends SkipLogging with KeyedMetaMapper[Long, A] {
>> 
>>>>       self: A with MetaMapper[A] with KeyedMapper[Long, A] =>
>> 
>>>>       override def afterCreate = (crudLog(_: A, "create")) ::
>>>> super.afterCreate
>> 
>>>>       override def afterUpdate = (crudLog(_: A, "update")) ::
>>>> super.afterUpdate
>> 
>>>>       override def afterDelete = (crudLog(_: A, "delete")) ::
>>>> super.afterDelete
>> 
>>>>       private def crudLog(obj: A, action: String): Unit = {
>>>>               if (!self.skipLogging) {
>>>>                       val log = new ActionLog
>> 
>>> log.action(action).klass(obj.getClass.getName).record(obj.id).save
>>>>               }
>>>>       }
>> 
>>>> }
>> 
>>>> trait SkipLogging {
>> 
>>>>       var skipLogging = false
>>>> }
>> 
>>>> trait ActionLogs[A <: Mapper[A] with IdPK] {
>> 
>>>>       this: A =>
>> 
>>>>       def logs: List[ActionLog] = ActionLog.findAll(
>>>>               By(ActionLog.klass, this.getClass.getName),
>>>>               By(ActionLog.record, this.id)
>>>>               )
>> 
>>>> }
>> 
>>>> --
>>>> You received this message because you are subscribed to the Google Groups
>>> "Lift" group.
>>>> To post to this group, send email to [email protected].
>>>> To unsubscribe from this group, send email to
>>> [email protected]<liftweb%[email protected]>
>>> .
>>>> For more options, visit this group at
>>> http://groups.google.com/group/liftweb?hl=en.
>> 
>>> --
>>> You received this message because you are subscribed to the Google Groups
>>> "Lift" group.
>>> To post to this group, send email to [email protected].
>>> To unsubscribe from this group, send email to
>>> [email protected]<liftweb%[email protected]>
>>> .
>>> For more options, visit this group at
>>> http://groups.google.com/group/liftweb?hl=en.
>> 
>> --
>> Lift, the simply functional web frameworkhttp://liftweb.net
>> Beginning Scalahttp://www.apress.com/book/view/1430219890
>> Follow me:http://twitter.com/dpp
>> Surf the harmonics
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Lift" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/liftweb?hl=en.
> 
> 

-- 
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en.


Reply via email to