小编eig*_*tor的帖子

Ruby类评估,validates_inclusion_of与动态数据

如果我有一个ActiveRecord模型如下

class Foo < ActiveRecord::Base
  validates_inclusion_of :value, :in => self.allowed_types

  def self.allowed_types
    # some code that returns an enumerable
  end
end
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为在评估验证时尚未定义allowed_types方法.我能想到的所有修复基本上都围绕着将方法定义移到验证之上,以便在需要时可用.

我理解这可能更像是一个编码风格的问题而不是任何东西(我希望我的所有验证都在模型的顶部和底部的方法)但我觉得应该有一些解决方案,可能涉及懒惰的评估初始模型加载?

我想做什么甚至可能?我应该只是定义验证上方的方法,还是有更好的验证解决方案来实现我想要的.

ruby ruby-on-rails class

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

Emacs元编程,动态定义方法

我正在尝试定义一些帮助函数,以便从emacs中快速跳转到不同的项目.我开始定义一个宏如下

(defmacro project-alias (name path)
  `(defun ,name ()
     (interactive)
     (cd ,path)))
Run Code Online (Sandbox Code Playgroud)

这很好用我也(project-alias foo "~/bar")没问题.当我尝试将此宏应用于元组列表时,问题就出现了.

(setq projects '((foo . "~/foo")
                 (bar . "~/bar")))

(dolist (p projects)
  (project-alias (car p) (cdr p)))
Run Code Online (Sandbox Code Playgroud)

上面的代码错误

Debugger entered--Lisp error: (wrong-type-argument symbolp (car p))
  defalias((car p) (lambda nil (interactive) (cd (cdr p))))
Run Code Online (Sandbox Code Playgroud)

我已经尝试将第一个参数作为字符串传递并调用intern以获得符号表示而没有任何乐趣,我也尝试定义我的宏来接受字符串形式,这也不起作用

我究竟做错了什么?

emacs macros elisp metaprogramming

3
推荐指数
1
解决办法
283
查看次数

标签 统计

class ×1

elisp ×1

emacs ×1

macros ×1

metaprogramming ×1

ruby ×1

ruby-on-rails ×1