#2 楼 @southwolf 能不能不带后缀呢??否则还是有问题的。。
哦 谢谢楼上诸位们
annotate 不是只是实现个注释的功能吗?没有实际起作用啊。。。
我认为,ActionModel 实现了作为一个模型的基本功能,但是是数据库无关的。ActionRecord 则是把模型和数据库联系在了一起。
呵 怎么听楼主这个意思是 用 Rails 不仅仅是敏捷,连学习都免了。我不相信会有一本讲 Rails 的教程竟然不讲如何创建 model,view,controller 的,会不讲 Rails 约定的。新手只要按部就绪的学习,又怎么可能疑惑呢? scaffold 是很不错的工具,自动生成高度提炼过的最纯粹最简单的同时由完全实现 rest 功能的代码。
额 好吧 你已经解决了 我之前说的是数据库里 schema_migrations 这样表,migration 是由它管的
你是不是数据库管 migration 的那张表被擦掉过了。。。
#11 楼 @lyfi2003 #12 楼 @hooopo 哦 我每次试验前有意先删除 Gemfile.lock 的 之前读代码就发现这个文件会影响很多行为,所以干脆先删掉了。 然后我发现,json >= 1.7.3 和 json <= 1.7.4 不能相容,但如果是 json >= 0.4.0 和 json <= 1.7.4 是能够相容的,但如果是 json >= 0.4.1 和 json <= 1.7.4 又变成不能相容了,0.4.0 的界限真的很奇怪,于是我重点研究 0.4.0 和 0.4.1 到底区别在什么地方。 随着阅读的深入,我发现其实 resolver 的 resolve instance method 是实现检查版本冲突的核心方法,但是实现非常麻烦,循环+递归,很难调试,所以我输出了一些信息,然后瞎猜了。以下内容均势我根据输出信息的猜测: 下面要输出的是调用 resolve 方法的参数,以及里面一个排序方法在排序前和排序后的数据对比,以及排序方法的 block 里返回的数据: 下面是 json >= 0.4.1 的输出信息:
➜ 6 /tmp/test-project rm Gemfile.lock; bundle install
rm: Gemfile.lock: No such file or directory
fatal: Not a git repository (or any of the parent directories): .git
fatal: Not a git repository (or any of the parent directories): .git
Fetching gem metadata from https://rubygems.org/..
resolve([use_json (>= 0) ruby, use_json_lower_than_1_7_4 (>= 0) ruby], {})
reqs before sort: [use_json (>= 0) ruby, use_json_lower_than_1_7_4 (>= 0) ruby]
use_json (>= 0) ruby => [1, 1, 1, 1]
use_json_lower_than_1_7_4 (>= 0) ruby => [1, 1, 1, 1]
reqs after sort: [use_json (>= 0) ruby, use_json_lower_than_1_7_4 (>= 0) ruby]
resolve([use_json_lower_than_1_7_4 (>= 0) ruby, json (>= 0.4.1) ruby], {"use_json"=>[#<Gem::Specification name=use_json version=0.0.1>]})
reqs before sort: [use_json_lower_than_1_7_4 (>= 0) ruby, json (>= 0.4.1) ruby]
use_json_lower_than_1_7_4 (>= 0) ruby => [1, 1, 1, 1]
json (>= 0.4.1) ruby => [1, 1, 1, 49]
reqs after sort: [use_json_lower_than_1_7_4 (>= 0) ruby, json (>= 0.4.1) ruby]
resolve([json (>= 0.4.1) ruby, json (<= 1.7.4) ruby], {"use_json"=>[#<Gem::Specification name=use_json version=0.0.1>], "use_json_lower_than_1_7_4"=>[#<Gem::Specification name=use_json_lower_than_1_7_4 version=0.0.1>]})
reqs before sort: [json (>= 0.4.1) ruby, json (<= 1.7.4) ruby]
json (>= 0.4.1) ruby => [1, 1, 1, 49]
json (<= 1.7.4) ruby => [1, 1, 1, 49]
reqs after sort: [json (>= 0.4.1) ruby, json (<= 1.7.4) ruby]
resolve([json (<= 1.7.4) ruby], {"use_json"=>[#<Gem::Specification name=use_json version=0.0.1>], "use_json_lower_than_1_7_4"=>[#<Gem::Specification name=use_json_lower_than_1_7_4 version=0.0.1>], "json"=>[#<Gem::Specification name=json version=1.7.5>, #<Gem::Specification name=json version=1.7.5>]})
reqs before sort: [json (<= 1.7.4) ruby]
json (<= 1.7.4) ruby => [0, 1, 1, 0]
reqs after sort: [json (<= 1.7.4) ruby]
Bundler could not find compatible versions for gem "json":
In Gemfile:
use_json_lower_than_1_7_4 (>= 0) ruby depends on
json (<= 1.7.4) ruby
use_json (>= 0) ruby depends on
json (1.7.5)
然后是 json >= 0.4.0 的输出信息:
➜ 6 /tmp/test-project rm Gemfile.lock; bundle install
rm: Gemfile.lock: No such file or directory
fatal: Not a git repository (or any of the parent directories): .git
fatal: Not a git repository (or any of the parent directories): .git
Fetching gem metadata from https://rubygems.org/..
resolve([use_json (>= 0) ruby, use_json_lower_than_1_7_4 (>= 0) ruby], {})
reqs before sort: [use_json (>= 0) ruby, use_json_lower_than_1_7_4 (>= 0) ruby]
use_json (>= 0) ruby => [1, 1, 1, 1]
use_json_lower_than_1_7_4 (>= 0) ruby => [1, 1, 1, 1]
reqs after sort: [use_json (>= 0) ruby, use_json_lower_than_1_7_4 (>= 0) ruby]
resolve([use_json_lower_than_1_7_4 (>= 0) ruby, json (>= 0.4.0) ruby], {"use_json"=>[#<Gem::Specification name=use_json version=0.0.1>]})
reqs before sort: [use_json_lower_than_1_7_4 (>= 0) ruby, json (>= 0.4.0) ruby]
use_json_lower_than_1_7_4 (>= 0) ruby => [1, 1, 1, 1]
json (>= 0.4.0) ruby => [1, 1, 1, 50]
reqs after sort: [use_json_lower_than_1_7_4 (>= 0) ruby, json (>= 0.4.0) ruby]
resolve([json (>= 0.4.0) ruby, json (<= 1.7.4) ruby], {"use_json"=>[#<Gem::Specification name=use_json version=0.0.1>], "use_json_lower_than_1_7_4"=>[#<Gem::Specification name=use_json_lower_than_1_7_4 version=0.0.1>]})
reqs before sort: [json (>= 0.4.0) ruby, json (<= 1.7.4) ruby]
json (>= 0.4.0) ruby => [1, 1, 1, 50]
json (<= 1.7.4) ruby => [1, 1, 1, 49]
reqs after sort: [json (<= 1.7.4) ruby, json (>= 0.4.0) ruby]
resolve([json (>= 0.4.0) ruby], {"use_json"=>[#<Gem::Specification name=use_json version=0.0.1>], "use_json_lower_than_1_7_4"=>[#<Gem::Specification name=use_json_lower_than_1_7_4 version=0.0.1>], "json"=>[#<Gem::Specification name=json version=1.7.4>, #<Gem::Specification name=json version=1.7.4>]})
reqs before sort: [json (>= 0.4.0) ruby]
json (>= 0.4.0) ruby => [0, 1, 1, 0]
reqs after sort: [json (>= 0.4.0) ruby]
resolve([], {"use_json"=>[#<Gem::Specification name=use_json version=0.0.1>], "use_json_lower_than_1_7_4"=>[#<Gem::Specification name=use_json_lower_than_1_7_4 version=0.0.1>], "json"=>[#<Gem::Specification name=json version=1.7.4>, #<Gem::Specification name=json version=1.7.4>]})
Using json (1.7.4)
Using use_json (0.0.1) from source at vendor/gems/use_json-0.0.1/
Using use_json_lower_than_1_7_4 (0.0.1) from source at vendor/gems/use_json_lower_than_1_7_4-0.0.1/
Using bundler (1.2.1)
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.
注意它们的区别在于,如果是 json >= 0.4.0 的时候,json >= 0.4.0 在 json <= 1.7.4 之后被解析,而 json >= 0.4.1 的时候,json >= 0.4.1 在 json <= 1.7.4 之前被解析。如果 json <= 1.7.4 先被解析,则会向数组放进一个 json = 1.7.4 的 gem,这样,后来的 json >= 0.4.0 就能和它兼容了,但是如果是 json >= 0.4.1 先被解析,则数组中直接被写入了 json 的最新版本 1.7.5,这样再解析 json <= 1.7.4 的时候就会出错了。那决定解析顺序的代码是什么呢?
reqs = reqs.sort_by do |a|
arr = [ activated[a.name] ? 0 : 1,
a.requirement.prerelease? ? 0 : 1,
@errors[a.name] ? 0 : 1,
activated[a.name] ? 0 : @gems_size[a] ]
puts "#{a.inspect} => #{arr.inspect}"
arr
end
这里我拦截这个数组,输出它后再返回它(源代码里就是直接返回这个数组)。可以从上门的输出信息中看到,真正决定谁先谁后的数据是数组最后一个元素,代码是@gems_size[a],通过阅读源码,发现 gems_size 的意思是,在 source 中符合这个 gem 要求的 gem 数量,在 rubygems.org 中,json >= 0.4.0 的 gem 有 50 个,json >= 0.4.1 的 gem 有 49 个,而 gem <= 1.7.4 的 gem 也是 49 个,由于 json >= 0.4.1 的 gem 数量等于 gem <= 1.7.4 的 gem 数量,在排序时没有优势,因此 json >= 0.4.1 先解析,然后出错了。而 json >= 0.4.0 的 gem 数量比 json <= 1.7.4 的 gem 数量多 1,在排序时有优势,所以后者前解析,成功。 这里最让人无语的是,source 里符合要求的 gem 数量竟然能影响 GemBundler 解决版本冲突的因素之一。我现在不知道该如何评论了。。。大家看看把??
#9 楼 @leekelby 不是啊 不能在 Gemfile 里定义两个名字相同版本号不同的 gem,也不能定义两个名字相同但是源不同的 gem,这个特性是显而易见的,而且在一个 Gemfile 里显式的声明两个名字相同的 gem 本身就是蛋疼行为,和我的问题无关。
# if there's already a dependency with this name we try to prefer one
if current = @dependencies.find { |d| d.name == dep.name }
if current.requirement != dep.requirement
if current.type == :development
@dependencies.delete current
elsif dep.type == :development
return
else
raise DslError, "You cannot specify the same gem twice with different version requirements. " \
"You specified: #{current.name} (#{current.requirement}) and " \
"#{dep.name} (#{dep.requirement})"
end
end
if current.source != dep.source
if current.type == :development
@dependencies.delete current
elsif dep.type == :development
return
else
raise DslError, "You cannot specify the same gem twice coming from different sources. You " \
"specified that #{dep.name} (#{dep.requirement}) should come from " \
"#{current.source || 'an unspecified source'} and #{dep.source}"
end
end
end
再用一个 sqlite 差不多了
你 Clone 下什么项目拉?Linux Kernel 吗?
可以 我当初成功实现过
Ruby 方法名里允许有!? =等符号
Great!
[1,2,3,4,5].inject(0) { |s, a| s - a } 这样?不过如果初始值是 0 的话计算结果是 -15,不是 -13
这问题不错啊 我也从没用过 replace 方法,甚至不知道这个方法的存在 只知道 Ruby 使用 sub 和 gsub 做替换的
我们公司有不少 Ruby Lady 能去吗?
#22 楼 @lgn21st 上传功能有点问题嘛 错误消息:POST http://ruby-china.org/photos 413 (Request Entity Too Large) 所以上传到https://plus.google.com/photos/114136340908879366522/albums/5797619732471044049 了,也就两张照片而已
略矮
应该能参加~