Ruby 遇到一个神奇的问题,不得解决,求高人指点!

Watermelon-Boy · 2021年02月22日 · 最后由 Watermelon-Boy 回复于 2021年02月28日 · 972 次阅读

pry 断在那里调试一下

先在 console require 'faker' 試著執行看看 Faker::Name.name

316786359 回复

用你的方法调试了,找出问题了,谢谢

kevinluo201 回复

调试出来了,是这一行的问题

316786359 回复

我换了个字符串,但是这样出来的示例用户名字都是一样的,有没有什么代码是可以让用户名字随机的

Watermelon-Boy 回复

结果是什麽问题 😂

kevinluo201 回复

用断点调试的,faker 那行代码的问题

Faker::Name.name 不就是随机的吗😐

ueiu 回复

对啊,是随机生成用户的呀,但是不知道我这里为什么不生效

ueiu 回复

可以给我看一下的全部代码吗?

参数错误,期望的是 0 到 1 个,上面显示的 2

Watermelon-Boy 回复

😅 截图是很难想让人家帮你破案的, 直接把你的 demo 上传到 github 地址发出来看一看 大概就知道什么问题了

lyb124553153 回复

懂了,下次这样做

同样的问题,发生在不同的代码,各位帮忙看看 https://github.com/Zhl1102/sample_app.git

Watermelon-Boy 回复

你这段错误代码根本没提交上来吧? 你项目仓库里没有 index.html.erb 文件

Watermelon-Boy 回复

这已经算提示很明显的报错了
期望 1 个参数,你传了 2 个
应该是第一行 provide 这个方法传参传多了

spike76 回复

分支是 updating-users,我没上传总的,目前只上传了分支,你点开分支看一下谢谢

xeruzo 回复

是要删除第一行 provide 吗?

实际上大家都被表面上的错误信息误导了, 的确是 ArgumentError, 但并不是截图中给出的那行触发的, 而是 gem 内部的代码触发的 (我也不知为何 rails 没有打印完整的错误栈).

针对楼主在 15 楼中的错误说下原因:

15 楼截图中显示是 will_paginate 这里报错, 实际触发这个错误的是will_paginate 这个 gem 中的 will_paginate_translate 方法, translate 这一行抛出的错误

translate 的方法签名是translate(key, **options), 而 will_paginate_translate 在调用 translate 时, 传入了一个 symbol 和 hash

translate(key, options.merge(:default => defaults, :scope => :will_paginate))

在 ruby2 中, 这并没有错, 然而楼主用的是 ruby3. 需要写成这样才能正确

translate(key, **options.merge(:default => defaults, :scope => :will_paginate))

详细原因看这.

楼主最开始描述的问题应该也是这个原因造成的, 建议直接将 ruby 换成 2.7 解决.

spike76 回复

真被大神说对了,非常感谢你,帮到了我🙏

spike76 回复

请问你是怎么定位到问题的,用的什么方法和工具

Watermelon-Boy 回复

rubymine

不过你这个问题只需要点开错误页面上的 full trace 就能看到完整的错误栈

ruby3 现在跟有的 gem 不兼容,尤其是 21 楼说的 hash 传值报错的,我也发现了好几个,最后又换回了 2.7

yfscret 回复

我最后也切换回 2.7 了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号