小编San*_*ino的帖子

在rails中的ActiveRecord对象中跟踪脏的非持久属性

我有一个从ActiveRecord继承的对象,但它有一个不在DB中持久化的属性,如:

 class Foo < ActiveRecord::Base
   attr_accessor :bar
 end
Run Code Online (Sandbox Code Playgroud)

我希望能够使用ActiveModel Dirty提供的'bar_changed?'等方法跟踪'bar'的更改.问题是,当我尝试在此对象上实现Dirty时,如文档中所述,我收到错误,因为ActiveRecord和ActiveModel都定义了define_attribute_methods,但是参数数量不同,所以我在尝试时遇到错误调用define_attribute_methods [:bar].

define_attribute_methods在包括之前尝试了别名ActiveModel::Dirty,但没有运气:我得到一个未定义的方法错误.

关于如何处理这个问题的任何想法?当然我可以手动编写所需的方法,但我想知道是否可以使用Rails模块,通过将ActiveModel功能扩展到ActiveRecord未处理的属性.

activerecord activemodel ruby-on-rails-3

26
推荐指数
1
解决办法
8308
查看次数

扩展基于C#文件的资源管理器

我想以不同于.NET的.resources(特别是.po)的文件格式存储我的资源,所以我用自定义资源阅读器编写了一个自定义资源集来检索它们.我使用CreateFileBasedResourceManager静态方法创建了一个ResourceManager,该方法创建了一个管理器的新实例,该实例使用指定的资源集(我在我的案例中编写的自定义资源集),使用Name.culture.resources从特定目录中的文件中检索资源集.文件名.

但是,我想更改文件名约定.我注意到为了这个目的,有一个可覆盖的GetResourceFileName方法.但是使用反射器我注意到CreateFileBasedResourceManager使用的构造函数是私有的,否则不可能设置"使用文件而不是程序集"标志.

有没有办法解决这个问题,而无需重新实现整个InternalGetResourceSet方法?

非常感谢!

c# resourcemanager

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

从 Ansible 中的自定义模块访问剧本变量

我正在 Ansible 中编写一个自定义模块,特定于 Playbook。是否可以直接访问 playbook 变量,而无需将其作为参数传递给任务?

ansible

7
推荐指数
1
解决办法
3756
查看次数

记录多线程应用程序中的活动

我在Java中有一个分层应用程序,它有一个多线程数据访问层,可以从不同的点调用.对该层的单次调用可能会产生多个线程来并行化对数据库的请求.

我正在寻找的是一个日志工具,它允许我定义由各种线程组成的"活动".因此,数据访问层中的相同方法应根据其调用者记录不同的输出.将不同输出分组以总结操作的总成本的能力也很重要.

虽然应用程序是Java语言,但语言不是限制; 我需要的是设计指南,以便最终实现它.我们目前正在使用log4j,但无法从中获取此行为.

java logging log4j

5
推荐指数
2
解决办法
4939
查看次数

使用绑定的多部分标识符更新SQL中的多个列

我正在尝试使用子查询更新MS SQL语句中的多个列.搜索引导我做类似的事情:

UPDATE table1
SET col1 = a.col1, col2 = a.col2, col3 = a.col3 FROM
(SELECT col1, col2, col3 from table2 where <expression>) AS a
WHERE table1.col1 <expression>
Run Code Online (Sandbox Code Playgroud)

http://geekswithblogs.net/phoenix/archive/2009/10/13/update-multiple-columns-on-sql-server.aspx

我的问题是在内部WHERE表达式中我需要引用table1中的特定字段:

UPDATE table1
SET col1 = a.col1, col2 = a.col2, col3 = a.col3 FROM
(SELECT col1, col2, col3 from table2 where table1.col0 = table2.col0) AS a
WHERE table1.col1 <expression>
Run Code Online (Sandbox Code Playgroud)

当我运行该查询时,我得到"多部分标识符"table1.col0"无法绑定.".显然,在使用该语法时,SQL无法绑定子查询中的当前table1记录.现在我正在为每个字段重复子查询并使用以下语法:

UPDATE table1
SET col1 = (subquery), col2 = (subquery)...
Run Code Online (Sandbox Code Playgroud)

但是每列执行一次子查询(这是非常昂贵的),我想避免.

有任何想法吗?

sql t-sql sql-update

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

在单独的文件(RoR)中为模型类添加回调

我有一个Message模型类(继承自ActiveRecord :: Base).对于特定部署,我希望有一个单独的文件,通过添加回调来修改Message.所以,而不是做:

# app/models/message.rb
class Message < ActiveRecord::Base
  before_save :foo
  def foo
     puts 'foo!'
  end
end
Run Code Online (Sandbox Code Playgroud)

我希望能够做到:

# app/models/message.rb
class Message < ActiveRecord::Base
end

# config/initializers/fixes.rb
Message
class Message
  before_save :foo
  def foo
     puts 'foo!'
  end
end
Run Code Online (Sandbox Code Playgroud)

问题是,它在我启动脚本/控制台时有效,但是当我使用脚本/服务器启动它时通常不会.这是最糟糕的部分,并不是它永远不会奏效.有时我启动服务器并且它可以工作,有时它不工作,而且没有对源进行任何更改.

我正在重新启动服务器本身(据我所知)初始化程序只运行一次,如果修改则不会重新加载.

我知道'有时'的作品很模糊,但我在这里花了好几个小时没有运气.也许某人有类似的问题,或者可以想出一个不同的想法来添加回调.

activerecord initialization ruby-on-rails callback

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