小编Chr*_*ele的帖子

使用参数提升自定义异常

我在rails中的模型上定义一个自定义Exception作为一种包装异常:( begin[code]rescue[raise custom exception]end)

当我提出异常时,我想传递一些关于a)内部函数引发错误的模型实例,以及b)捕获的错误的信息.

这是一个模型的自动导入方法,该方法由来自外部数据源的POST请求填充.

tldr; 如果您自己定义Exception,如何将参数传递给Exception?我在该Exception上有一个初始化方法,但raise语法似乎只接受一个Exception类和消息,没有传递给实例化过程的可选参数.

ruby exception-handling ruby-on-rails exception

46
推荐指数
4
解决办法
5万
查看次数

Django模板:通过扩展模板覆盖包含子模板的块

我想知道是否有人知道如何处理以下古怪的模板结构:

### base.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">

<head>
  <title> {% block title %} Title of the page {% endblock %} </title>
</head>

<body>
  <header>
    {% block header %}
      {% include "base/header.html" %}
    {% endblock header %}
  </header>
  {% block content %}{% endblock %}
</body>

</html>
Run Code Online (Sandbox Code Playgroud)
### base/header.html
<div id="menu-bar">
  {% block nav %}
    {% include "base/nav.html" %}
  {% endblock %}
</div>
Run Code Online (Sandbox Code Playgroud)
### base/nav.html
<nav id="menu">
  <ul>
    <li>
      <a href="/profile/">My Profile</a>
    </li>
    <li>
      <a href="/favs/">My Favorites</a>
    </li> …
Run Code Online (Sandbox Code Playgroud)

python django django-templates django-inheritance

33
推荐指数
3
解决办法
2万
查看次数

Python的字典列表值的hasattr总是返回false?

我有一个字典,有时会接收不存在键的调用,所以我尝试使用hasattrgetattr处理这些情况:

key_string = 'foo'
print "current info:", info
print hasattr(info, key_string)
print getattr(info, key_string, [])
if hasattr(info, key_string):
    array = getattr(info, key_string, [])
array.append(integer)
info[key_string] = array
print "current info:", info
Run Code Online (Sandbox Code Playgroud)

第一次运行integer = 1:

current info: {}
False
[]
current info: {'foo': [1]}
Run Code Online (Sandbox Code Playgroud)

再次运行此代码integer = 2:

instance.add_to_info("foo", 2)

current info: {'foo': [1]}
False
[]
current info: {'foo': [2]}
Run Code Online (Sandbox Code Playgroud)

第一次运行显然是成功的({'foo': [1]}),但是hasattr返回false并且getattr第二次使用默认的空白数组,丢失1了进程中的值!为什么是这样?

python dictionary class list hasattr

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

Ruby一元代波形(`~`)方法

我在一个pry REPL中闲逛,发现了一些非常有趣的行为:代字号方法.

看来Ruby语法有一个内置的文字一元运算符~,只是坐在那里.

这意味着~Object.new将消息发送~到以下实例Object:

class Object
  def ~
    puts 'what are you doing, ruby?'
  end
end
~Object.new #=> what are you doing, ruby?
Run Code Online (Sandbox Code Playgroud)

这看起来很酷,但很神秘.Matz基本上是想给我们自己定制的一元运算符吗?

我在rubydocs中可以找到的唯一参考是在运算符优先级注释中,它被排在第一位最高优先级运算符旁边!,unary +这对于一元运算符是有意义的.(关于接下来两个优先级的有趣勘误,**那么unary -,看看这个问题.)除此之外,没有提到这个实用程序.

我可以通过在~=,!, and~~>`问题中搜索找到对这个运算符的两个值得注意的引用是这个这个.他们都注意到它的实用性,古怪性和默默无闻,而没有进入它的历史.

在我即将注销~作为为对象提供自定义一元操作符行为的一种很酷的方式之后,我找到了一个实际用于ruby的地方 - fixnum(整数).

~2回报-3.~-1回报1.所以它否定了一个整数并减去一个......出于某种原因?

任何人都可以启发我作为波形符操作符在红宝石中的独特和意外行为的目的吗?

ruby syntax operators literals

11
推荐指数
1
解决办法
4580
查看次数

从特征类确定类

在Ruby中,获取类的本征类Foo是一个简单的

eigenclass = class << Foo; self; end
#=> #<Class:Foo>
eigenclass = Foo.singleton_class #2.1.0
#=> #<Class:Foo>
Run Code Online (Sandbox Code Playgroud)

我对逆操作感兴趣:从本征类本身获取本征类的所有者:

klass = eigenclass.owner
#=> Foo
Run Code Online (Sandbox Code Playgroud)

我不确定这是否可行,因为本征类是其匿名子类Class,因此Foo在其继承层次结构中无处可见.检查本征类的方法列表也不令人鼓舞.eigenclass.name回报nil.唯一让我希望这是可能的:

Class.new # normal anon class
#=> #<Class:0x007fbdc499a050>
Foo.singleton_class
#=> #<Class:Foo>
Run Code Online (Sandbox Code Playgroud)

显然,本征类的to_s方法知道关于所有者的一些事情,即使在实例化特征类时该信息是硬编码的.因此,我所知道的唯一方法Object.const_getting就是那样的hacky

Object.const_get eigenclass.to_s[/^#\<Class\:(?<owner>.+)\>$/, :owner]
#=> Foo
Run Code Online (Sandbox Code Playgroud)

ruby metaprogramming class eigenclass

9
推荐指数
2
解决办法
266
查看次数

Rails路由:指定none时的格式约束

对于Reasons™,我想让一个控制器处理html请求,另一个处理json api请求.

我的路线中有这个:

scope module: :api, as: :api do
  constraints format: :json do
    resources :users
  end
end
constraints format: :html do
  resources :users
end
Run Code Online (Sandbox Code Playgroud)

当url运行后缀时,这很有用:/users.json通过我的Api::UsersControlleràla api_users_path; /users.html经过我UsersController点菜users_path.

但是,当url中没有后缀时,这不会按预期运行.将约束实现为lambda会显示出错:

#=> visiting /users

scope module: :api, as: :api do
  constraints ->(request){ puts "In api: #{request.format}"; request.format == :json } do
    resources :users
  end
end
constraints ->(request){ puts "In html: #{request.format}"; request.format == :html } do
  resources :users
end

#=> In api: text/html …
Run Code Online (Sandbox Code Playgroud)

routing ruby-on-rails rails-routing ruby-on-rails-4

6
推荐指数
1
解决办法
3808
查看次数

迭代coffeescript中的jQuery DOM元素:$(@).捷径

我的coffeescript中有很多循环遍历DOM元素集合,并执行更多jQuery.这些函数看起来像这样:

$('.iterable.object').each ->
    $(@).doThis
    $(@).doThat

    ## More complicated usage
    $(@).jqueryPluginCall
        x: $(@).data('attr1')
        x: $(@).data('attr2')

    ## More complicated usage
    $(@).children('ul.animateable').each ->
        if $(@).data('animation') is "fancy"
            $(@).animate fancy: animation
        else
            $(@).animate simple: animation
        $(@).focus(
            ->
                $(@).animate some: more
            , ->
                $(@).animate even: more
        ) ## Or however you do double callbacks
Run Code Online (Sandbox Code Playgroud)

我做了大约3个错别字$(@).一次又一次地进入's,这变得很痛苦.

没有快捷语法$(@)?输入有点痛苦,似乎是一种非常常见的语法.如果它@像自动函数调用者那样操作,那就太酷了,&doThis而不是像&.doThis.

编辑:我希望能够在jQuery加载后在javascript中定义一个别名,在调用时使用DOM元素进行响应&并链接到方法&doThis,而不是在每个循环的顶部以@bennedich建议的方式.

javascript shortcut coffeescript

5
推荐指数
1
解决办法
4617
查看次数

Rolify的目的是什么?

嗨,我正在使用rolify并且刚刚意识到我并没有真正利用它的全部潜力.

目前我在我的控制器中做的事情就像重新路由用户一样current_user.has_role? :whatever_role,并允许用户,如果他们有任何其他角色...

有人问关于rolvert的stackoverflow问题,当我试图回答它时,我意识到我做错了.

现在,我的混乱开始了......在ability.rb里面,我有:

user ||= User.new # guest user (not logged in)
if user.has_role? :consumer
  can :manage, Review
else
  can :read, Review
end
Run Code Online (Sandbox Code Playgroud)

现在让我们说我将用户角色添加到用户:

x=User.last
x.add_role :consumer
# => #<Role id: 10, name: "consumer", resource_id: nil, resource_type: nil, created_at: "2013-04-18 23:00:46", updated_at: "2013-04-18 23:00:46"> 
Run Code Online (Sandbox Code Playgroud)

是的,所以创建了角色.我可以通过这样做来检查:

x.has_role? :consumer
=> true
Run Code Online (Sandbox Code Playgroud)

现在我希望这能为评论提供管理能力......

x.has_role? :consumer, Review
=> true
Run Code Online (Sandbox Code Playgroud)

但不适用于其他型号......我在这里尝试产品

x.has_role? :consumer, Product
=> true
Run Code Online (Sandbox Code Playgroud)

此外,当我查看"资源角色查询"并尝试查询应用的评论角色时,我发现没有应用角色:

Review.first.applied_roles
=> []
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释rolify.谢谢

ruby ruby-on-rails rolify

5
推荐指数
1
解决办法
4618
查看次数

用于安装仅执行一次的gem迁移的Rake任务

为什么这个rake任务

gems = %w(gem1 gem2 gem3)
namespace :gems do
  namespace :install do
    desc "Runs install:migrations for all gems"
    task :migrations do
      gems.each do |gem_name|
        print "\nInstalling migrations for the #{gem_name} gem...\n"
        Rake::Task["#{gem_name}:install:migrations"].invoke
      end
      print "\n\nGem migrations installed."
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

实际上只运行第一组迁移,无论我使用的gems/gem order/random调用reenable?

Installing migrations for the gem1 gem...
Copied migration whatever from gem1
Copied migration whatever from gem1
Copied migration whatever from gem1
Copied migration whatever from gem1

Installing migrations for the gem2 gem...
(nothing)

Installing migrations for the gem3 …
Run Code Online (Sandbox Code Playgroud)

ruby rake ruby-on-rails ruby-on-rails-3

4
推荐指数
1
解决办法
927
查看次数

找到所有先前的下一个素数

我正在写一个递归无限素数生成器,我几乎可以肯定我可以更好地优化它.

现在,除了前十几个素数的查找表之外,每次调用递归函数都会收到所有先前素数的列表.

因为它是一个懒惰的生成器,所以现在我只是过滤掉任何以前的素数为0的任何数字,并取出第一个未经过滤的结果.(检查我正在使用短路,因此,当前一个素数首次将当前数字均分时,它会中止该信息.)

现在,我在搜索第400个素数(37,813)时性能下降.我正在寻找方法来使用我有一个所有先前质数列表的独特事实,并且我只搜索下一个,以改进我的过滤算法.(我能找到的大多数信息提供非懒筛找到下一个素数的限制,或方法来查找与p ñ个素数给定P N-1 ,不优化,求P ñ给出2.P N-1的素数. )

例如,我知道在p Ñ个素数必须驻留在范围(P N-1 + 1)...(P n-1个 + P N-2 ).现在我开始在p n-1 + 2 处对整数进行滤波(因为p n-1 + 1只能是p n-1 = 2的素数,这是预先计算的).但由于这是一个懒惰的生成器,知道范围的终端边界(p n-1 + p n-2)并没有帮助我过滤任何东西.

鉴于所有以前的素数,我能做些什么来更有效地过滤?

代码示例

  @doc """
  Creates an infinite stream of prime numbers.

    iex> Enum.take(primes, 5)
    [2, 3, 5, 7, 11]

    iex> Enum.take_while(primes, fn(n) -> n < 25 end)
    [2, 3, 5, 7, 11, 13, 17, 19, 23]

  """
  @spec primes :: Stream.t …
Run Code Online (Sandbox Code Playgroud)

algorithm primes generator lazy-evaluation sieve-of-eratosthenes

4
推荐指数
2
解决办法
513
查看次数

从多个其他人组成一个Gemfile

我正在将一个大型应用程序拆分成多个较小的应用程序.在这样做的时候,我意识到通过Gemfile.global在我的主应用程序和子应用程序中创建并包含它,我可以清理我Gemfile的所有内容.例如,我的所有部署宝石都在主要部分Gemfile,而我的导轨进入了Gemfile.global.

它几乎适用于我的所有宝石,除了一个:Squeel.

Gemfile在根应用程序中开始:

gemfiles = [
  File.join('Gemfile.global'),
]
Dir.glob(File.join(File.dirname(__FILE__), gemfiles)) do |gemfile|
  eval(IO.read(gemfile), binding)
end

# gem 'squeel' # Let's try putting this in Gemfile.global
Run Code Online (Sandbox Code Playgroud)

Gemfile.global看起来像:

source 'https://rubygems.org'
# rails and dependencies
gem 'squeel'
Run Code Online (Sandbox Code Playgroud)

bundle installrails sSqueel在主要方面表现出色,以及几乎所有东西,你期望的方式Gemfile.Gemfile.global但是,在使用默认的Squeel初始值设定项时,将其置于初始化过程中:

Squeel.configure do |config|
end
Run Code Online (Sandbox Code Playgroud)

rails suninitialized constant Squeel (NameError)即使bundle install报道,也会抛出一个Using squeel (1.0.13).为什么这个组合我Gemfile的陷阱运行时常量的方法?

gem rubygems ruby-on-rails squeel gemfile

3
推荐指数
2
解决办法
533
查看次数

Rails NullBoolean?

Rails是否具有Django NullBoolean的内置等价物,接受三个值(nil,true,false)?如果没有,你会如何推荐实施它?

就我而言,我有一张桌子Overrides和一张桌子Objects.Objects可以有很多Overrides.Overrides在结构上几乎相同Objects.在读取a的值之前Object,我将其拉出Overrides,有条件地通过它们,然后将这些值应用于Object.

任何Overridenil的字段都不会应用任何更改.这个系统对我来说效果很好,但我刚刚添加了一个布尔字段Objects,所以我需要在其上放置一个可以为空的布尔值Overrides.Django NullBoolean在这种情况下运行良好,但我找不到相应的rails.

ruby activerecord ruby-on-rails sqldatatypes ruby-on-rails-3

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