首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Towerjs模型查找器-变量作用域

Towerjs模型查找器-变量作用域
EN

Stack Overflow用户
提问于 2012-06-08 19:02:01
回答 1查看 91关注 0票数 0

我想在模型上做查询,然后根据结果做一些其他的事情

问题是:

代码语言:javascript
复制
  exists = false
  App.User.where(email: "example@domain.com").exists (error, exists) =>      
    console.log exists #=> true
  console.log exists #=> false

举个例子说明我为什么要这样做:

代码语言:javascript
复制
class App.User extends Tower.Model
  newUser: ->
    exists = false
    App.User.where(email: "some@email.com").exists (error, exists) =>   

    unless exists                 # here is always: exists = false
      @.create
        email: "some@email.com"   # so user is created

我也尝试了类似这样的东西:

代码语言:javascript
复制
class App.User extends Tower.Model
  newUser: ->
    @.where(email: "some@email.com").exists (error, exists) =>
      unless exists                         # statement works 
        @.create                            # but I can't create an user
          email: "some@email.com"  

        App.User.create                     # also doesn't work
          email: "some@email.com"  

        user = new App.User                 # this also fails
        user.set "email", "some@email.com"
        user.save()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-09 01:24:20

对数据库的查询是异步的,这意味着在数据返回后需要运行的任何代码都必须在回调中。因此,在第一个示例中,unless exists实际上将在数据库查询完成之前运行。我想如果你把它和它后面的代码缩进两个空格,就会把它放在回调中,它就会像预期的那样运行。尝试:

代码语言:javascript
复制
class App.User extends Tower.Model
  newUser: ->
    exists = false
    App.User.where(email: "some@email.com").exists (error, exists) =>   

      unless exists                 
        @.create
          email: "some@email.com"

如果唯一性验证工作正常,那么只需在模型上放置唯一性验证,就可以更容易地获得相同的结果。因此,在您的模型中,您将具有类似以下内容:

代码语言:javascript
复制
class App.User extends Tower.Model
  @field "email", type: "String"
  @field "firstName", type: "String"
  @field "lastName", type: "String"

  @hasMany "posts"

  @validates 'email', uniqueness: true

  @timestamps()

不幸的是,根据最近的一些实验,uniqueness中有一个小错误导致它失败。我把这个bug贴在了tower的问题列表上,我也在亲自调查它,所以希望它很快就能正常工作。

希望这能有所帮助。

编辑:我想提一下,我不完全确定为什么第二个例子失败了,因为它看起来很像我的建议,除非我错了,或者上下文(@的值)因为在数据库查询中使用@而不是App.User而发生了变化。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10947590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档