你的理解是对的,ajax 请求只要有对应的.js.erb 文件就行。
我怀疑是你浏览器发起的请求不是 ajax 请求。rails_ujs 的 ajax 请求的 request.formats 应该 text/javascript, 而你的是 text/html
你可以浏览器检查元素,查看网络那块,点击表单后请求的类型是不是 XHR。如果不是 XHR,那很可能是 rails_ujs 的问题。
1.可以,但不是必须的。rails 有新开一个线程,定期回收已死线程的连接。 https://github.com/rails/rails/blob/2f76256127d35cfbfaadf162e4d8be2d0af4e453/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb#L300
2.不会
3.http 请求结束时,释放。
具体 4.2 的代码是在 rack 中间件里 https://github.com/rails/rails/blob/73521d586981279a99d3ba038d62e2414125df7a/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb#L655
5.2 的代码是在 query_cache 的 complete 里 (类似 after_action 里) https://github.com/rails/rails/blob/2f76256127d35cfbfaadf162e4d8be2d0af4e453/activerecord/lib/active_record/query_cache.rb#L37
虽然有点砸场子 ,但我更推荐用 https://devdocs.io/,文档种类更多,也能自己搭,首次打开后会缓存到本地,之后打开速度就特别快。
用 eval, 例如
eval("$#{$key}")
挺有趣的,招聘页面检查元素,藏了个 base64 的密文
楼主对 autoload 的理解是对的
autoload :Base
会在引用 Base 常量,按需执行
require('main/base')
但 require 查找文件是根据$LOAD_PATH
来找的,参考 wiki
https://ruby-china.org/topics/28453
楼上 $:
就是$LOAD_PATH
简写
https://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html
params 里参数名改为 wives_attributes
9
Both signal handlers are called 因为 trap 会返回上一个信号的 handler https://ruby-doc.org/core-2.2.0/Signal.html#method-c-trap
trap returns the previous handler for the given signal
我的经验是 ajax 的重定向应该
render js: 'window.location.href=xxxxx'
也可以在非 view 的地方使用
ActionController::Base.helpers.number_to_currency 7777777
你看看《Rails 入门》后续的 5.11 节
如果传入和实例变量(@article)同名的符号(:article),也会自动产生相同效果
所以
form_for :article
等同于
form_for @article
::Equipment::Accepting 已经解决了常量查找的问题。
tables not exist 是说数据库中不存在名字叫 Accepting 的表,你应该看看数据库表的名字是什么,对应改变 model 的名字。或者在 model 中写
self.table_name = "你的表名"
migration 里也要 establish_connection, 参考https://stackoverflow.com/questions/20502806/rails-migrate-with-different-databases
不好意思,我解释错了,应该是跟执行 ruby 的进程的文件夹有关。参考如下的 require 例子
https://rubyplus.com/articles/4661-The-require-and-load-path-in-Ruby
因为这两文件在同一文件夹下,所以可以 load 成功吧。
当前文件夹下找不到,再去 load_path 下找吧。