我有一个结构如下的 Article 类型:
type Article struct {
Title string
Content string `datastore:",noindex"`
}
在我网站的管理部分,我列出了我所有的文章。为了显示此列表,我唯一需要的属性是 Title;抢文章内容好像很浪费。所以我使用 projection query :
q := datastore.NewQuery("Article").Project("Title")
到目前为止,一切都按预期进行。现在我决定向 Article 添加两个字段,以便某些文章可以在公共(public)文章列表中不列出和/或在尝试访问时无法查看。了解数据存储是无模式的,我认为这可能非常简单。我将两个新字段添加到 Article:
type Article struct {
Title string
Content string `datastore:",noindex"`
Unlisted bool
Unviewable bool
}
我还将它们添加到投影查询中,因为我想在文章公开不公开和/或不可查看时在管理文章列表中指出:
q := datastore.NewQuery("Article").Project("Title", "Unlisted", "Unviewable")
不幸的是,当 Put 进入数据存储区时,这只会返回明确包含 Unlisted 和 Unviewable 的条目。
我现在的解决方法是简单地停止使用投影查询:
q := datastore.NewQuery("Article")
返回所有条目,从未设置Unlisted 或Unviewable 的条目按预期设置为零值。缺点是文章内容被不必要地传递。
在这种情况下,这种妥协并不可怕,但我预计将来会出现类似的情况,并且无法使用投影查询可能是一件大事。投影查询和向数据存储条目添加新属性似乎不太适合。我想确保我没有误解某些事情或错过正确的做事方式。
从文档中我不清楚投影查询应该以这种方式运行(忽略没有投影属性的条目,而不是将它们包含为零值)。这是预期的行为吗?
在这种情况下(向结构添加新字段/向条目添加属性)是放弃投影查询或运行某种“模式迁移”的唯一选择,获取全部条目然后放它们回来,所以它们现在具有零值属性并且可以被投影?
最佳答案
投影查询的字段数据来自索引而非实体,当您添加新属性时,预先存在的记录不会出现在您正在执行项目查询的那些索引中。它们将需要重新编入索引。
您正在请求那些特定的属性,但它们不存在,因此是当前的行为。
除了您在查询中放置的任何过滤器之外,您可能应该将投影查询视为对在请求的索引中具有值的实体的请求。
关于google-app-engine - 具有新字段/属性的投影查询忽略尚未设置这些属性的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18157630/
我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass
我希望我的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
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
我有一个具有一些属性的模型: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
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog
对于Rails模型,是否可以/建议让一个类的成员不持久保存到数据库中?我想将用户最后选择的类型存储在session变量中。由于我无法从我的模型中设置session变量,我想将值存储在一个“虚拟”类成员中,该成员只是将值传递回Controller。你能有这样的类(class)成员吗? 最佳答案 将非持久属性添加到Rails模型就像任何其他Ruby类一样:classUser扩展解释:在Ruby中,所有实例变量都是私有(private)的,不需要在赋值前定义。attr_accessor创建一个setter和getter方法:classUs
我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie
当我在我的Rails应用程序根目录中运行rakedoc:app时,API文档是使用/doc/README_FOR_APP作为主页生成的。我想向该文件添加.rdoc扩展名,以便它在GitHub上正确呈现。更好的是,我想将它移动到应用程序根目录(/README.rdoc)。有没有办法通过修改包含的rake/rdoctask任务在我的Rakefile中执行此操作?是否有某个地方可以查找可以修改的主页文件的名称?还是我必须编写一个新的Rake任务?额外的问题:Rails应用程序的两个单独文件/README和/doc/README_FOR_APP背后的逻辑是什么?为什么不只有一个?
我正在使用Postgres.app在OSX(10.8.3)上。我已经修改了我的PATH,以便应用程序的bin文件夹位于所有其他文件夹之前。Rammy:~phrogz$whichpg_config/Applications/Postgres.app/Contents/MacOS/bin/pg_config我已经安装了rvm并且可以毫无错误地安装pggem,但是当我需要它时我得到一个错误:Rammy:~phrogz$gem-v1.8.25Rammy:~phrogz$geminstallpgFetching:pg-0.15.1.gem(100%)Buildingnativeextension