请帮我获取在类中声明的所有实例变量,instance_methods
方法同样向我展示了类中可用的所有方法.
class A
attr_accessor :ab, :ac
end
puts A.instance_methods #gives ab and ac
puts A.something #gives me @ab @ac...
Run Code Online (Sandbox Code Playgroud) 我想使用instance_eval增强现有的类.原始定义包含验证,需要存在某些字段,即:
class Dummy < ActiveRecord::Base
validates :field, :presence => true
end
Run Code Online (Sandbox Code Playgroud)
现在我想使用instance_eval(或任何其他方法,实际上)将其更改为可选:
Dummy.instance_eval do
...
end
Run Code Online (Sandbox Code Playgroud)
删除验证的正确语法是什么,因此该字段是可选的.我宁愿直接在模型层上执行此操作,而是在控制器或视图中执行奇怪的操作.实际上并不需要使用instance_eval,但据我所知,这通常是增强Rails中类的最佳方法.
编辑#1
一般来说 - 原始类是gem的一部分,我不想分叉它,也不想绑定到特定的版本.一般原因并不重要.简单地编辑原始模型比猴子修补具有更糟糕的后果.
我正在使用rack-cors gem在我的rails应用程序中实现CORS,但我不确定如何为不同的来源定义不同的资源.
我需要这样的东西:
config.middleware.insert_before 0, Rack::Cors do
allow do
origins 'http://localhost:3000'
resource '/api/*', headers: :any, methods: [:get, :post, :options, :put, :delete]
end
allow do
origins 'http://localhost:6000'
resource '*', headers: :any, methods: [:get, :post, :options, :put, :delete]
end
end
Run Code Online (Sandbox Code Playgroud)
所以它允许" http:// localhost:3000 "只访问'/ api/*'并允许' http:// localhost:6000 '访问所有.可能吗?
上面的代码是正确的代码/语法吗?
谢谢.