小编equ*_*nt8的帖子

如何在Rails应用程序中覆盖gem generator模板

我知道如何在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本机模板

谢谢

rubygems ruby-on-rails ruby-on-rails-3 ruby-on-rails-4

2
推荐指数
1
解决办法
891
查看次数

`alias_method`是一种私有方法

我有一个公开两种接口方法的类client_optionsuser_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)

但是,它有点难以理解.

是否有更直接的解决方法来为私有方法添加别名?

ruby alias-method

2
推荐指数
1
解决办法
2609
查看次数

如何告诉Rails RSpec规范是"类型助手"

我写了*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 …

rspec rspec2 rspec-rails ruby-on-rails-3 simple-form

0
推荐指数
1
解决办法
1196
查看次数

有没有办法将对象转换为ruby中的另一个类

让我说我有模特

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)

我只是想知道是否有办法将对象完全降级为父类实例

ruby ruby-on-rails

0
推荐指数
1
解决办法
970
查看次数