我知道如何在gem中覆盖Rails模板,但是如何在Rails应用程序中覆盖gem generator模板
例如:https : //github.com/elabs/pundit/blob/master/lib/generators/pundit/policy/templates/policy.rb
要么
https://github.com/drapergem/draper/blob/master/lib/generators/rails/templates/decorator.rb
这样就rails g decorator Foo可以生成我的模板,而不是gem本机模板
谢谢
我有一个公开两种接口方法的类client_options和user_options,在这个级别的祖先,它们相当于default_options.我不希望其他开发人员default_options直接实现,因此它是私有的.
class Foo
def client_options
default_options
end
def user_options
default_options
end
private
def default_options
{ foo: :bar }
end
end
Run Code Online (Sandbox Code Playgroud)
为了保存一些代码行,我想对方法进行别名:
class Foo
alias_method :client_options, :default_options
alias_method :user_options, :default_options
private
def default_options
{ foo: :bar }
end
end
Run Code Online (Sandbox Code Playgroud)
但alias_method只是别名公共方法.
我在这个博客上找到了如何为私有方法添加别名:
class Foo
def default_options
{ foo: :bar}
end
private :default_options
alias_method :client_options, :default_options
public :client_options
end
Run Code Online (Sandbox Code Playgroud)
但是,它有点难以理解.
是否有更直接的解决方法来为私有方法添加别名?
我写了*simple_form*输入扩展名,位于app/inputs/something_input.rb中
我正在尝试为此编写RSpec.当我把这个规范放在spec/helpers/application_helper_spec.rb中时,一切正常,没有任何问题.
# spec/helpers/application_helper_spec.rb
require 'spec_helper'
describe ApplicationHelper do
it do
helper.simple_form_for @foo,:method=>'get', :url=>helper.users_path do |f|
f.input :created_at, :as =>:custom_datepicker
end.should =~ /something/
end
end
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试将该规范移动到spec/inputs/something_input_spec.rb,因此它将是类似的名称路径.
# spec/imputs/something_input_spec.rb
require 'spec_helper'
describe SomethingInput do
it do
helper.simple_form_for @foo,:method=>'get', :url=>helper.users_path do |f|
f.input :created_at, :as =>:custom_datepicker
end.should =~ /something/
end
end
#
#ERROR: undefined local variable or method `helper' for #<RSpec::Core::ExampleGroup
Run Code Online (Sandbox Code Playgroud)
我想告诉RSpec威胁这个文件作为类型帮助规范,所以我将使用所有RSpec :: Rails :: HelperExampleGroup功能的辅助方法
... 我怎样才能做到这一点 ??
我试图用RSpec …
让我说我有模特
User < ActiveRecord::Base
end
Run Code Online (Sandbox Code Playgroud)
和他的STI兄弟
MasqueradeUser < User
end
masquerade_user = MasqueradeUser.find 123
masquerade_user.class
# => MasqueradeUser
Run Code Online (Sandbox Code Playgroud)
听起来很荒谬,可以将这个对象转换回父类 User
masquerade_user.some_magic.class # => User
Run Code Online (Sandbox Code Playgroud)
我知道我可以覆盖像和其他方法mode_name,is_a?(User)以便MasqueradeUser将返回像User
MasqueradeUser < User
def model_name
'User'
end
end
Run Code Online (Sandbox Code Playgroud)
我只是想知道是否有办法将对象完全降级为父类实例