我遇到了一个有趣的问题,一个复杂的模型关联。
我有一个项目,它有许多任务,也有一个唯一的任务,它从它自己的信息。(可以将任务转换为项目,以便在项目下面嵌入其他任务)
class Settr.Project extends Batman.Model
@resourceName: 'projects'
@storageKey: 'projects'
@persist Batman.RailsStorage, serializeAsForm: false
@belongsTo 'owner', name: 'User', inverseOf: 'projects'
@belongsTo 'task', inverseOf: 'project'
@hasMany 'tasks'
@encode 'task_id', 'owner_id'
@encodeTimestamps()任务模型可能属于一个项目的hasMany关系,或者如果它是“任务”属性的反义词,它可能会发挥一个hasOne关系。
class Settr.Task extends Batman.Model
@resourceName: 'tasks'
@storageKey: 'tasks'
@persist Batman.RailsStorage, serializeAsForm: false
@belongsTo 'user'
@belongsTo 'project', inverseOf: 'task', saveInLine: true
@hasOne 'project'
@hasMany 'entries', name: 'TaskEntry', inverseOf: 'task', saveInline: true
@accessor 'lastEntry', ->
@get('entries').reduce (a, b) ->
(if a.created_at < b.created_at then a else b)
@encode 'user_id', 'project_id'
@encodeTimestamps()在未来,我将实现任务重复的能力,并允许查看给定任务发生的历史。这个模型用TaskEntry表示。
class Settr.TaskEntry extends Batman.Model
@resourceName: 'entries'
@storageKey: 'entries'
@persist Batman.RailsStorage
@PRIVACY_OPTIONS = ['is_public', 'is_private', 'is_follower']
@DIFFICULTY_OPTIONS = ['','easy', 'moderate', 'hard']
@STATUS_OPTIONS = ['incomplete', 'complete']
@belongsTo 'task', inverseOf: 'entries'
@urlNestsUnder 'task'现在问题来了。当我想发布一个新的项目时,我必须为这个项目嵌入一个新的任务,并给这个任务一个TaskEntry并设置它的标题属性。(标题是唯一需要的字段)
有趣的是,当我的项目被格式化如下:(与上面相同)
class Settr.Project extends Batman.Model
@resourceName: 'projects'
@storageKey: 'projects'
@persist Batman.RailsStorage, serializeAsForm: false
@belongsTo 'owner', name: 'User', inverseOf: 'projects'
@belongsTo 'task', inverseOf: 'project'
@hasMany 'tasks'
@encode 'task_id', 'owner_id'
@encodeTimestamps()我可以检索项目,但不能发布一个新的项目。
如果我在项目模型中编码了“任务”,那么我就能够成功地发布,但不再能够检索。下面的例子。
class Settr.Project extends Batman.Model
@resourceName: 'projects'
@storageKey: 'projects'
@persist Batman.RailsStorage, serializeAsForm: false
@belongsTo 'owner', name: 'User', inverseOf: 'projects'
@belongsTo 'task', inverseOf: 'project'
@hasMany 'tasks'
@encode 'task_id', 'owner_id', 'task'
@encodeTimestamps()从@encode上的Batman.js API文档中,我发现@encode可以像这样定制。
@encode 'myProperty',
decode: (value, key, incomingJSON, outgoingObject, record) -> # returns a value to set on the record
encode: (value, key, builtJSON, record) -> # returns a value to put into the JSON
as: "my_property" # overrides "myProperty" as the JSON key但我不太确定这是否对我是正确的解决方案,或者我的问题是否在其他地方。如果这是我想要的解决方案,我如何适当地使用它?这些文件有点超出我的想象。
谢谢!
发布于 2014-08-10 18:43:40
这可能是由命名冲突引起的:
@belongsTo 'project', inverseOf: 'task', saveInLine: true
@hasOne 'project'它为project定义了两个访问器--我认为后面的访问器会覆盖前面的访问器。
您可以在不更改JSON的情况下重命名hasOne关联:
@hasOne 'special_project', foreignKey: 'project_id'(必须提供foreignKey,否则它将默认为special_project_id)
https://stackoverflow.com/questions/25231145
复制相似问题