我的理解是,在定义:counter_cache选项时,它将在包含belongs_to声明的模型上指定.因此,当使用has_may通过关联时,我有点不确定如何处理这个问题(因为我认为在这种情况下不使用belongs_to声明):
class Physician < ActiveRecord::Base
has_many :appointments
has_many :patients, :through => :appointments
end
class Appointment < ActiveRecord::Base
belongs_to :physician, :counter_cache => appointment_count
end
class Patient < ActiveRecord::Base
end
Run Code Online (Sandbox Code Playgroud)
我希望使用:counter_cache选项来更有效地查找属于医生的患者数量.
myPhysician.patients.count
Run Code Online (Sandbox Code Playgroud)
仅供参考:Rails 3.1
干杯
我的Angular 1.3应用程序正在使用angular-translate库.在我的Karma测试中,我试图$translate用我创建的Mock对象来模拟提供者.
调用模拟对象MockTranslate,它属于myMocks模块.我没有MockTranslate在问题中包含来源,因为它与问题无关.
我测试的主题是一个控制器,我可以很容易地$translate使用以下模拟:
module('myMocks');
inject(function($controller, MockTranslate) {
$controller("MyController", {
$translate: MockTranslate.create(translations);
});
});
Run Code Online (Sandbox Code Playgroud)
上面的模拟工作,但我倾向于使用angular.mock.module类似的东西来模拟提供者:
module('myMocks');
module("myModule", function($provide) {
$provide.provider("$translate", function(MockTranslate) {
return MockTranslate.create(translations);
});
});
Run Code Online (Sandbox Code Playgroud)
但是当我运行测试时出现以下错误:
Error: [$injector:modulerr] Failed to instantiate module function ($provide) due to: Error: [$injector:unpr] Unknown provider: MockTranslate
如何使用模拟提供程序angular.mock.module?
几周前我在我的机器上安装了nix软件包管理器(macOS 10.12.6 Sierra).
我想更新mylocal nixpkgs集合,使其与频道中的任何上游更新同步.我的理解是,这可以通过运行:nix-channel --update.但是当我运行它时,我得到以下输出:
unpacking channels...
created 0 symlinks in user environment
建议我的系统订阅的频道中没有更新任何表达式.如果我跑,nix-channel --list我没有看到列出的任何频道.默认情况下我的系统订阅了哪个频道?我应该期望它被列出吗?
nix-channel --update如果我修改了我订阅的频道或者我订阅了不稳定的频道,通常只会产生局部变化吗?
我正在使用Active Model Serializers v0.10.0.rc4
我想产生看起来像这样的json:
{
"posts": [
{ "post": {"id": 2, "name": "foo"} },
{ "post": {"id": 3, "name": "bar"} }
],
"next_page": 3
}
Run Code Online (Sandbox Code Playgroud)
我知道基本的:
render json: posts, each_serializer: PostSerializer
Run Code Online (Sandbox Code Playgroud)
将产生这样的json:
[
{"id": 2, "name": "foo"}
{"id": 3, "name": "bar"}
]
Run Code Online (Sandbox Code Playgroud)
我尝试了以下操作:
控制器:
render json: posts, serializer: PostsSerializer
Run Code Online (Sandbox Code Playgroud)
posts_serializer:
class PostsSerializer < ActiveModel::Serializer
attributes :posts, :next_page
def posts
ActiveModel::Serializer::CollectionSerializer.new(object,
each_serializer: PostSerializer,
root: "post"
)
end
def next_page
3
end
end
Run Code Online (Sandbox Code Playgroud)
但这会产生如下的json:
{
"posts": [
{
"object": {"id": 2, …Run Code Online (Sandbox Code Playgroud) 当我在 Mac OSX 上使用 Nix 将带有英语 Aspell 字典的 Aspell 包安装到我的全局环境中时:
$ nix-env -iA nixpkgs.aspell nixpkgs.aspellDicts.en
Run Code Online (Sandbox Code Playgroud)
然后 Aspell 的行为正如我所期望的:
$ aspell dump dicts
en
en-variant_0
...
Run Code Online (Sandbox Code Playgroud)
但是,如果我将软件包安装到 nix-shell 中,则词典似乎未正确安装:
$ nix-shell -p aspell aspellDicts.en --pure
$ aspell dump dicts
# nothing printed
$ echo 'word lister to check' | aspell --list
Error: No word lists can be found for the language "en_US".
Run Code Online (Sandbox Code Playgroud)
以下每个变体都会产生相同的问题行为:
nix-shell。谁能建议如何让它发挥作用?
我想运行一个安装了以下软件包的 nix-shell:
我不能简单地做:nix-shell -p aspell aspellDicts.en hello --pure因为这将无法正确安装 aspell 词典。Nix 提供了一个aspellWithDict函数,可用于使用字典构建 aspell:
nix-build -E 'with import <nixpkgs> {}; aspellWithDicts (d: [d.en])'
Run Code Online (Sandbox Code Playgroud)
我想将此构建的结果用作另一个本地包 (foo) 中的依赖项。这就是我目前实现这一目标的方式:
./pkgs/aspell-with-dicts/default.nix:
with import <nixpkgs> {};
aspellWithDicts (d: [d.en])
Run Code Online (Sandbox Code Playgroud)
./pkgs/foo/default.nix:
{stdenv, aspellWithDicts, hello}:
stdenv.mkDerivation rec {
name = "foo";
buildInputs = [ aspellWithDicts hello ];
}
Run Code Online (Sandbox Code Playgroud)
./custom-packages.nix:
{ system ? builtins.currentSystem }:
let
pkgs = import <nixpkgs> { inherit system; };
in
rec {
aspellWithDicts = import ./pkgs/aspell-with-dicts;
foo = …Run Code Online (Sandbox Code Playgroud)