我刚刚开始将带有角度5的webpacker添加到现有的rails应用程序中.一切都很好,除了测试DI的奇怪问题.
看来我的Angular组件在使用浏览器创建时才起作用,但在使用Jasmine/Karma进行测试时,Dependency Injector无法识别注入令牌.使用伪代码:
@Component({...})
export class SomeComponent {
constructor(private service: SomeService) {}
}
Run Code Online (Sandbox Code Playgroud)
以上工作在浏览器中,但正在Error: Can't resolve all parameters for SomeComponent: (?).测试中.到目前为止,我注意到它适用于所有@Injectable(),但是一旦我用显式的@Inject替换每个注入:
@Component({...})
export class SomeComponent {
constructor(@Inject(SomeService) private service: SomeService) {}
}
Run Code Online (Sandbox Code Playgroud)
一切正常(但显然是非常麻烦).有什么明显可能导致这种情况吗?
我有一个非常简单的服务与HttpClient一起运行:
import { Injectable } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import 'rxjs/add/operator/map'
@Injectable()
export class GeneralStatsService {
constructor(
private http : HttpClient
) {}
getMinDate() {
return this.http.get("/api/v1/general_stats/min_date")
.map(r => new Date(r))
}
}
Run Code Online (Sandbox Code Playgroud)
当我导航到使用所述服务的组件时,它按预期工作.但是,在使用Jasmine进行测试时,它不起作用:
import { TestBed } from …Run Code Online (Sandbox Code Playgroud) dependency-injection ruby-on-rails typescript webpacker angular
我最近注意到,changed?ActiveRecord对象上的方法在Rails 3.2.13和Rails 4.0.1之间发生了变化.问题是连接到数据库中的整数字段的字段.假设我有模型Model与number整数字段:
# Rails 3.2.13
m = Model.last
m.number #=> 5
m.number = '5hello'
m.number #=> 5
m.number_changed? #=> true
m.changed? #=> true
m.changes #=> {:number => [5,5]}
# Rails 4.0.1
m = Model.last
m.number #=> 5
m.number = '5hello'
m.number #=> 5
m.number_changed? #=> false
m.changed? #=> false
m.changes #=> {}
Run Code Online (Sandbox Code Playgroud)
这会导致表单验证时出现一些非常烦人的问题 - 如果用户试图将整数值更改为无效字符(但类型转换将导致与初始值相同的值),rails将不会调用save方法,也不会调用验证(包括numericality: { only_integer: true })将运行.
我设法通过覆盖number_changed?方法来解决这个问题super || number.to_s != number_before_type_cast,但这非常难看.
问题是:为什么这会改变?这是一个错误还是故意改变?如何在不覆盖整数列的所有元方法的情况下修复它?
我真的在Ruby中使用以下类型的代码:
my_hash = {}
my_hash['test'] = 1
Run Code Online (Sandbox Code Playgroud)
Java中的对应数据结构是什么?
假设我的模型定义如下:
class Client < AR:Base
has_one :driver_profile, class_name: 'Driver'
has_many :races
end
class Driver
# attribute :dob
belongs_to :client
has_and_belongs_to_many :teams
end
class Race
# attribute :date
belongs_to :client
has_and_belongs_to_many :drivers
end
Run Code Online (Sandbox Code Playgroud)
这背后的逻辑是:在页面上注册的每个客户端都能够注册多个不同的比赛,每个团队可以拥有多个驱动程序.然而,每个客户也是一个驱动程序,默认情况下,它将被分配给他的每个团队.为了达到这个目的,我已经覆盖了Team drivers阅读器(我正在使用andandgem):
def drivers
association = super
driver_profile = client.andand.driver_profile
if !driver_profile || driver_profile.new_record? || association.include? driver_profile
association << client.driver_profile
end
association
end
Run Code Online (Sandbox Code Playgroud)
这很好用,但是并不像我希望的那样漂亮(每当我调用这个方法时它会进行额外的db调用).
我有一个非常庞大的多步形式适用于所有型号.在前两个步骤中,用户可以编辑他的个人信息(在客户端模型上),他的driver_profile和他的初始比赛.在后面的步骤中,他可以为他的比赛添加任意数量的驾驶员,但是驾驶员的出生日期需要根据比赛日期进行验证(必须至少为21).
问题是,此验证不属于驱动程序模型,因为驱动程序可能对一个种族有效,并且对第二次竞赛无效.因此,这是一个种族问题,而不是一个驱动因素.我写了这样的验证(在Race模型上):
validate :drivers_at_least_21
def drivers_at_least_21
error = false
drivers.each do |driver|
if driver.age_at(start) < 21
driver.errors.add(:dob, :too_young)
error …Run Code Online (Sandbox Code Playgroud) 我有一个我想要的输入(除了其他格式化的东西)只允许数字.这对keyDown事件很容易:
field.keydown(function(e) {
if (e.shiftKey) return false;
var key = e.which;
var is_numeric = ((key <= 57 && key >= 48) || (key <= 105 && key >= 96));
// ...
if (is_numeric && ..) {
format_field();
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
这工作很漂亮,但是我有iOS的严重的问题,因为有具有相同的键码对符号,数字(例如@和2既有代码50,或者1和!都是49),并且在余下的标志无差异以及(shiftKey,altKey,"ctrlKey`对于两个事件造成的).我已经测试了这些事件:http://api.jquery.com/keydown/(参见页面底部的演示),我没有注意到这些对的keyDown事件之间有任何区别.
绝对没有办法告诉我哪个键被按下了或者我错过了什么?
我想使用 upsert_all 方法在简单查询中从集合中插入(和更新)记录,例如:
books = []
10.times do |i|
books << Book.new(name: "book #{i}")
end
Book.upsert_all(books)
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
.../activemodel-6.1.4.1/lib/active_model/attribute_methods.rb:469:in `method_missing': undefined method `keys' for #<Book id: nil, name: "book 0"> (NoMethodError)
Run Code Online (Sandbox Code Playgroud)
我正在寻找的是能够插入所有或 upsert_all 任意集合作为一本书,例如,如果您能帮助我,我将不胜感激
使用bash执行某些命令时遇到问题.假设我有一个简单的bash脚本:
#!/bin/bash
cmd="sh -c \"ls\""
$cmd
Run Code Online (Sandbox Code Playgroud)
这很好用.但是,如果我更改命令的参数以包含空格:
#!/bin/bash
cmd="sh -c \"ls -a\""
$cmd
Run Code Online (Sandbox Code Playgroud)
然后它抛出-a": 1: -a": Syntax error: Unterminated quoted string错误.似乎bash正确地注意到开放引用,但它停止在第一个空间寻找结束引用.如果我改变$cmd到echo $cmd它返回sh -c "ls -a"预期.如果我在终端中执行此命令一切正常,但$(./mysh.sh)失败并出现相同的错误.
我曾尝试用\(或双重逃避)引用来逃避空间\\\"(愚蠢的想法,但值得一试).谁能解释一下这里发生了什么?
Traceback (most recent call last):
16: from /home/hman01/.rvm/rubies/ruby-2.5.0/bin/irb:11:in `<main>'
15: from /home/hman01/.rvm/rubies/ruby-2.5.0/lib/ruby/2.5.0/irb.rb:381:in `start'
14: from /home/hman01/.rvm/rubies/ruby-2.5.0/lib/ruby/2.5.0/irb.rb:381:in `new'
13: from /home/hman01/.rvm/rubies/ruby-2.5.0/lib/ruby/2.5.0/irb.rb:410:in `initialize'
12: from /home/hman01/.rvm/rubies/ruby-2.5.0/lib/ruby/2.5.0/irb.rb:410:in `new'
11: from /home/hman01/.rvm/rubies/ruby-2.5.0/lib/ruby/2.5.0/irb/context.rb:91:in `initialize'
10: from /home/hman01/.rvm/rubies/ruby-2.5.0/lib/ruby/2.5.0/irb/extend-command.rb:242:in `save_history='
9: from /home/hman01/.rvm/rubies/ruby-2.5.0/lib/ruby/2.5.0/irb/ext/save-history.rb:45:in `save_history='
8: from /home/hman01/.rvm/rubies/ruby-2.5.0/lib/ruby/2.5.0/irb/ext/save-history.rb:21:in `init_save_history'
7: from /home/hman01/.rvm/rubies/ruby-2.5.0/lib/ruby/2.5.0/irb/ext/save-history.rb:21:in `extend'
6: from /home/hman01/.rvm/rubies/ruby-2.5.0/lib/ruby/2.5.0/irb/ext/save-history.rb:65:in `extended'
5: from /home/hman01/.rvm/rubies/ruby-2.5.0/lib/ruby/2.5.0/irb/ext/save-history.rb:75:in `load_history'
4: from /home/hman01/.rvm/rubies/ruby-2.5.0/lib/ruby/2.5.0/irb/ext/save-history.rb:75:in `open'
3: from /home/hman01/.rvm/rubies/ruby-2.5.0/lib/ruby/2.5.0/irb/ext/save-history.rb:76:in `block in load_history'
2: from /home/hman01/.rvm/rubies/ruby-2.5.0/lib/ruby/2.5.0/irb/ext/save-history.rb:76:in `each'
1: from /home/hman01/.rvm/rubies/ruby-2.5.0/lib/ruby/2.5.0/irb/ext/save-history.rb:76:in `block (2 levels) in load_history'
/home/hman01/.rvm/rubies/ruby-2.5.0/lib/ruby/2.5.0/irb/ext/save-history.rb:76:in `<<': string contains null …Run Code Online (Sandbox Code Playgroud) ruby ×5
activerecord ×1
angular ×1
bash ×1
hash ×1
ios ×1
java ×1
javascript ×1
jquery ×1
rubygems ×1
typescript ×1
webpacker ×1