安装版本
ember-cli 2.14.2
ember-data 2.14.10
menu 的服务在计算属性中执行存储查询。这些商店查询之一的行为相当奇怪。它获取模型名称下的所有记录 product-segment来自功能齐全的 JSON API。该模型与名为 product 的模型具有 n-n 关系。 , 通过 hasMany 引用DS 对象:export default DS.Model.extend({
products: DS.hasMany('product'),
// ...
});
export default DS.Model.extend({
productSegments: DS.hasMany('product-segment'),
// ...
})
product-segment模型,我将 API 指示为 { include: 'products' } ,并且 API 会按要求执行。响应包括 15 个相关的 product特定型号 product-segment , 哪个是对的。product-segment 段 x ,这是我下面所有调试信息的主题)product-segment 类似的问题模型,所以我不认为这是一个特定模型的问题。test - 找出来,我甩了{{menu.test}}进入我的视野,让计算出来的 Prop 发痒。services/menu.js 中的最低限度信息export default Service.extend({
store: inject(),
activeProductSegment: null,
// As a note: this does not trigger an infinite loop
productSegments: computed('store.product.[]', 'store.product-segment.[]', function() {
return get(this, 'store').findAll('product-segment', { include: 'products' });
}),
test: computed('activeProductSegment', function() {
let segment = get(this, 'activeProductSegment');
if (segment) {
console.log(segment.hasMany('products').ids());
console.log(get(segment, 'products').mapBy('id'));
}
}),
});
activeProductSegment正在设置为不同的 product-segment通过组件的操作对实例进行建模,如下所示:export default Component.extend({
menu: inject(), // menu service is injected here...
actions: {
setProductSegment(segment) {
get(this, 'menu').set('activeProductSegment', segment);
}
}
});
activeProductSegment永远不会以任何其他方式更新。 View 通过此操作 product-segment模型对象:{{#each menu.productSegments as |segment|}}
<li {{action 'setProductSegment' segment}}>{{segment.name}}</li>
{{/each}}
menu.activeProductSegment至段 x 通过单击其关联的<li>元素。product 的型号段 x ,返回的集合中只有 15 个模型中的 12 个。为了确保 JSON 响应真的很好(即类型定义等是正确的),我检查了 product 的数量。在 注册的 ID段 x .我记录了以下行(以下日志的上下文在上面的 Ember.Service 片段中):console.log(segment.hasMany('products').ids());
product这些 id 的模型已包含在响应中,所以我认为某种异步数据应该没有问题。尽管如此,以下行还是给了我一个 12 个 id 的数组:console.log(get(segment, 'products').mapBy('id'));
setTimeout ,但结果保持不变:
"7", "6" .猜猜这不是问题:
hasMany 中缺少模型的原因可能是什么?关系集合,尽管所有必要的 id 都已在 hasMany 正确注册关系对象,此时我们不需要等待任何异步/网络数据的到达?什么可能是该问题的合适解决方案?
最佳答案
我知道它似乎与异步问题无关,但我仍然会尝试将 hasMany 定义为非异步:
products: DS.hasMany('product', {async: true}),
关于javascript - EmberJS/Ember-data : hasMany collection incomplete, 尽管所有 ID 都存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45869475/
“输出”是一个序列化的OpenStruct。定义标题try(:output).try(:data).try(:title)结束什么会更好?:) 最佳答案 或者只是这样:deftitleoutput.data.titlerescuenilend 关于ruby-on-rails-更好的替代方法try(:output).try(:data).try(:name)?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c
我的模型有defself.empty_building//stuffend我怎样才能对这个现有的进行rspec?,已经尝试过:describe"empty_building"dosubject{Building.new}it{shouldrespond_to:empty_building}endbutgetting:Failure/Error:it{shouldrespond_to:empty_building}expected#torespondto:empty_building 最佳答案 你有一个类方法self.empty_bu
有几种方法:first_or_create_by、find_or_create_by等,它们的工作原理是:与数据库对话以尝试找到我们想要的东西如果我们找不到,就自己做保存到数据库显然,并发调用这些方法可能会使两个线程都找不到它们想要的东西,并且在第3步中一个线程会意外失败。似乎更好的解决方案是,创建或查找即:提前在您的数据库中创建合理的唯一性约束。如果你想保存一些东西,就保存它如果有效,那就太好了。如果它因为RecordNotUnique异常而无法工作,它已经存在,太好了,加载它那么在什么情况下我想使用Rails内置的东西而不是我自己的(看起来更可靠)create_or_find?
因此,当我遵循MichaelHartl的RubyonRails教程时,我注意到在用户表中,我们为:email属性添加了一个唯一索引,以提高find的效率方法,因此它不会逐行搜索。到目前为止,我们一直在根据情况使用find_by_email和find_by_id进行搜索。然而,我们从未为:id属性设置索引。:id是否自动索引,因为它在默认情况下是唯一的并且本质上是顺序的?或者情况并非如此,我应该为:id搜索添加索引吗? 最佳答案 大多数数据库(包括sqlite,这是RoR中的默认数据库)会自动索引主键,对于RailsMigration
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
是否可以在不实际下载文件的情况下检查文件是否存在?我有这么大的(~40mb)文件,例如:http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm这与ruby不严格相关,但如果发件人可以设置内容长度就好了。RestClient.get"http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm",headers:{"Content-Length"=>100} 最佳答案
当且仅当模型存在时,我才尝试更新模型的值。如果没有,我什么都不做。搜索似乎只返回更新或创建问题/答案,但我不想创建。我知道我可以用一个简单的方法来做到这一点:found=Model.find_by_id(id)iffoundupdatestuffend但是,我觉得有一种方法可以在一次调用中完成此操作,而无需分配任何临时本地值或执行if。如果记录不存在,我该如何编写一个Rails调用来更新记录而不出现嘈杂错误?最新的Rails3.x 最佳答案 您可以使用try在对find_by_id或where的结果调用update_attribut
类似的东西:defdomain_exists?(domain)#performcheck#returntrue|falseendputs"valid!"ifdomain_exists?("example.com") 最佳答案 require'socket'defdomain_exists?(domain)beginSocket.gethostbyname(domain)rescueSocketErrorreturnfalseendtrueend 关于ruby-如何使用Ruby检查域是否存
我有很多模型和关系。由于这个事实,在View/Controller中有很多调用,看起来像这样:@object.something.with_something.value链的某些部分最终可能为零,这完全没问题。检查终端对象是否存在的正确/干净/快速的方法是什么?正在调用类似的东西:@object.something.with_something.valueifdefined?@object.something.with_something.value还可以吗? 最佳答案 在本地,您需要使用&&运算符(不是defined?),但这很快
capybara找不到在我的cucumber测试中用它的id标记。当我save_and_open_page时,我能够看到该元素.但我无法通过has_css?找到它或find:pry(#)>page.html.scan(/notice_sent/).count=>1pry(#)>page.html.scan(/id=\"notice_sent\"/).count=>1pry(#)>page.find('#notice_sent')Capybara::ElementNotFound:Unabletofindcss"#notice_sent"from/Users/me/.gem/ruby/2