草庐IT

google-app-engine - 尝试将实体放入数据存储区似乎只放置了一个键,而不是我想到的关联属性

coder 2024-07-08 原文

这是我尝试插入具有电子邮件属性的实体的地方。在浏览器中,U 可以看到收到了 db_success。在数据存储区查看器中,我可以看到该实体是通过 2 次写入插入的,这非常低,浏览到该实体时我可以看到实体类型、实体键和 ID,但没有别的:

    c := appengine.NewContext(r)
    u := user.Current(c)

    if u == nil || !user.IsAdmin(c) {
        return
    }

    addrmv := r.FormValue("addrmv")
    user_email := r.FormValue("user_email")
    if addrmv == "add" {
        if user_email == "" {
            return
        }
        uemail := uemail_struct{
            user_email: user_email,
        }
        _,err :=    datastore.Put(c,datastore.NewIncompleteKey(c,"users",nil),&uemail)
        if err != nil {
            io.WriteString(w, "\"result\":\"db_error\"")
        } else {
            io.WriteString(w, "\"result\":\"db_success\"")
        }
    } else if addrmv == "rmv"{
        return
        //TODO expand
    }

另一段代码是我想根据电子邮件限制用户访问的地方。我尝试对我之前插入的实体的电子邮件属性进行数据存储查询,并将授权帐户重定向到预期页面,并将未经授权的帐户重定向回应用程序入口 url:

c := appengine.NewContext(r)
u := user.Current(c)
if u == nil {
    http.Redirect(w, r, "/", http.StatusSeeOther)
} else if user.IsAdmin(c) {
    io.WriteString(w, admins_choice_html)
} else {
    var emails []uemail_struct
    q := datastore.NewQuery("users").Filter("user_email =", u.Email)
    _,err := q.GetAll(c,&emails)
    if err != nil {
        http.Redirect(w, r, "/", http.StatusSeeOther)
    }
    if len(emails) == 0 {
        url, err := user.LogoutURL(c, "/")
        if err != nil {
            http.Error(w, err.Error(), http.StatusInternalServerError)
            return
        }
        w.Header().Set("Location", url)
        w.WriteHeader(http.StatusFound)

    } else {
        http.Redirect(w, r, "/dist/index.html", http.StatusSeeOther)
    }
}

我确定我的测试数据和添加用户电子邮件的功能没问题。这意味着我为数据 user@example.com 电子邮件地址执行了第一段代码,并为相同的 user@example.com 电子邮件地址执行了第二段代码。我能得出的唯一结论是,放在第一段代码中的数据存储没有在数据存储中插入值为 user@example.com 的所需属性 user_email。

最佳答案

我发现问题出在我定义结构的方式上。而不是

type uemail_struct{
    user_email string
}

简单的写

type Uemail_struct{
    User_email string
}

修复程序,现在添加新用户和他们的登录工作。

关于google-app-engine - 尝试将实体放入数据存储区似乎只放置了一个键,而不是我想到的关联属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37691719/

有关google-app-engine - 尝试将实体放入数据存储区似乎只放置了一个键,而不是我想到的关联属性的更多相关文章

  1. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  2. ruby-on-rails - 如果为空或不验证数值,则使属性默认为 0 - 2

    我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val

  3. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  4. ruby - 多个属性的 update_column 方法 - 2

    我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2

  5. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  6. ruby - Nokogiri 剥离所有属性 - 2

    我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog

  7. ruby-on-rails - 使用 Rmagick 或 ImageMagick 在背景上放置标题 - 2

    我有一张背景图片,我想在其中添加一个文本框。我想弄清楚如何将标题放置在其顶部的正确位置。(我使用标题是因为我需要自动换行功能)。现在,我只能让文本显示在左上角,但我需要能够手动定位它的开始位置。require'RMagick'require'Pry'includeMagicktext="Loremipsumdolorsitamet"img=ImageList.new('template001.jpg')img 最佳答案 这是使用convert的ImageMagick命令行的答案。如果你想在Rmagick中使用这个方法,你必须自己移植

  8. ruby-on-rails - Rails 模型——非持久类成员或属性? - 2

    对于Rails模型,是否可以/建议让一个类的成员不持久保存到数据库中?我想将用户最后选择的类型存储在session变量中。由于我无法从我的模型中设置session变量,我想将值存储在一个“虚拟”类成员中,该成员只是将值传递回Controller。你能有这样的类(class)成员吗? 最佳答案 将非持久属性添加到Rails模型就像任何其他Ruby类一样:classUser扩展解释:在Ruby中,所有实例变量都是私有(private)的,不需要在赋值前定义。attr_accessor创建一个setter和getter方法:classUs

  9. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  10. ruby - 我可以将我的 README.textile 以正确的格式放入我的 RDoc 中吗? - 2

    我喜欢使用Textile或Markdown为我的项目编写自述文件,但是当我生成RDoc时,自述文件被解释为RDoc并且看起来非常糟糕。有没有办法让RDoc通过RedCloth或BlueCloth而不是它自己的格式化程序运行文件?它可以配置为自动检测文件后缀的格式吗?(例如README.textile通过RedCloth运行,但README.mdown通过BlueCloth运行) 最佳答案 使用YARD直接代替RDoc将允许您包含Textile或Markdown文件,只要它们的文件后缀是合理的。我经常使用类似于以下Rake任务的东西:

随机推荐