问题列表 - 第22519页

如何为每个表在Rails中创建完整的审核日志?

我们最近开始在我们公司进行合规性推动,并且需要保留我们目前在Rails应用程序中管理的数据的完整历史记录.我们已经可以将每个操作的描述性内容简单地推送到日志文件中,这是一种相当不引人注目的方式.

我倾向于做这样的事情ApplicationController:

around_filter :set_logger_username

def set_logger_username
  Thread.current["username"] = current_user.login || "guest"
  yield
  Thread.current["username"] = nil
end
Run Code Online (Sandbox Code Playgroud)

然后创建一个看起来像这样的观察者:

class AuditObserver < ActiveRecord::Observer
  observe ... #all models that need to be observed

  def after_create(auditable)
    AUDIT_LOG.info "[#{username}][ADD][#{auditable.class.name}][#{auditable.id}]:#{auditable.inspect}"
  end

  def before_update(auditable)
    AUDIT_LOG.info "[#{username}][MOD][#{auditable.class.name}][#{auditable.id}]:#{auditable.changed.inspect}"
  end

  def before_destroy(auditable)
    AUDIT_LOG.info "[#{username}][DEL][#{auditable.class.name}][#{auditable.id}]:#{auditable.inspect}"
  end

  def username
    (Thread.current['username'] || "UNKNOWN").ljust(30)
  end
end
Run Code Online (Sandbox Code Playgroud)

并且通常这很有用,但是当使用<association>_ids加入has_many:through =>关联的"魔法" 方法时它会失败.

例如:

# model
class MyModel
  has_many :runway_models, :dependent => :destroy
  has_many :runways, :through => :runway_models
end

#controller
class MyModelController …
Run Code Online (Sandbox Code Playgroud)

ruby activerecord ruby-on-rails observer-pattern

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

相交LINQ查询

如果我有一个IEnumerable,其中ClassA公开了类型为long的ID属性.是否可以使用Linq查询获取具有属于第二个IEnumerable的ID的ClassA的所有实例?

换句话说,这可以做到吗?

IEnumerable<ClassA> = original.Intersect(idsToFind....)?
Run Code Online (Sandbox Code Playgroud)

原来是IEnumerable<ClassA>和idsToFind的地方IEnumerable<long>.

.net c# linq

48
推荐指数
4
解决办法
8万
查看次数

如何在不将结果分组到SQL的情况下应用SUM操作?

我有一张像这样的桌子:

+----+---------+----------+
| id | group   | value    |
+----+---------+----------+
|  1 | GROUP A | 0.641028 | 
|  2 | GROUP B | 0.946927 | 
|  3 | GROUP A | 0.811552 | 
|  4 | GROUP C | 0.216978 | 
|  5 | GROUP A | 0.650232 | 
+----+---------+----------+
Run Code Online (Sandbox Code Playgroud)

如果我执行以下查询:

SELECT `id`, SUM(`value`) AS `sum` FROM `test` GROUP BY `group`;
Run Code Online (Sandbox Code Playgroud)

我显然得到:

+----+-------------------+
| id | sum               |
+----+-------------------+
|  1 |  2.10281205177307 | 
|  2 | 0.946927309036255 | …
Run Code Online (Sandbox Code Playgroud)

mysql sql group-by

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

检查是否安装了SQL服务器(任何版本)?

我需要查找是否在计算机上安装了SQL Server.它可以是任何版本的SQL服务器(7,2005,8,sql express等).我们在编写安装程序时需要知道此信息,并且需要向用户显示如果未找到SQL服务器,则无法继续安装.

我见过使用注册表,wmi,SMO或只是连接到SQL服务器实例的版本(虽然在这里没有帮助,因为我们不知道服务器名称).

我们正在使用Wix安装程序.

这样做的正确方法是什么?

JD

c# sql-server

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

在C#或OOP中,2个类应该相互引用吗?

我正在使用C#编写类库.我设计了3个主要类来帮助建模数据.设计它们使得类A包含类B实例的列表,而类B包含对类C实例的引用,即:

public class Policy
{
    public List < PolicyTerm > myTerms;
    person Customer;
    string PolicyNumber;
}

public class PolicyTerm
{
     public Billing myBill;
     Datetime effectivedate;
     List < Activities > termActivities;
     public doAction()
     {
          use value from Policy, like PolicyNumber;
     }

}

public class Billing
{
    float remainingBalance;
    Datetime nextDueDate;
    public void doSomething()
    {
         reference value from PolicyTerm, such as effective date;
         use value from Policy, such as PolicyNumber;
    }
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是当我尝试在PolicyTerm或Billing中使用需要来自包含类的数据的方法时.在上面的示例中,这将是尝试使用PolicyTerm中的值的方法"doSomething",例如请求或将数据保存到数据库中的术语的生效日期.

我想知道我是否因为这种情况而为我的班级设计了正确的设计.我是否应该在子类中添加对"父"类的引用,以使父数据可用?或者我是否需要重新考虑代码的整体结构和设计?

我觉得类设计适用于建模数据和业务规则,但它确实会产生一些限制,如上述情况.我喜欢将PolicyTerm和Billing分开,以便能够独立地修改和测试代码.此外,我觉得它保持每个部分更小,更简单.

任何可以提供的建议都将非常感激.

更新:代码块已更新,以提供有关代码的更多详细信息.

.net c# asp.net oop

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

WPF:在窗口和用户控件中聚焦

我正在尝试让 UserControl 正确地进行选项卡并感到困惑。逻辑树看起来像这样。

|-Window
  -Grid
    -TabControl
      -TabItem
        -StackPanel
          -MyUserControl
            |-StackPanel
              -GroupBox
                -Grid
                  -ComboBox
                    -Textbox1
                      -Textbox2
Run Code Online (Sandbox Code Playgroud)

Everything works fine, except when the visibility converter for the ComboBox returns Visibility.Collapsed(don't allow user to change database mode), then when textbox1 is selected, instead of being able to tab through the controls in the UserControl, the focus shifts to a button在窗口底部声明。除了显示的控件之外,没有设置 TabIndex 或 FocusManager 属性。

我的头撞在砖墙上,我一定是遗漏了什么。我试过 IsFocusScope=True/False,用 FocusedElement 玩,如果 ComboBox 是不可见的 ( Visibility.Collapsed) ,没有任何效果。

<Window x:Class="MyNamespace.Client.WinInstaller"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    FocusManager.FocusedElement="{Binding ElementName=tabWizard}">
    <Window.Resources>
        <props:Settings …
Run Code Online (Sandbox Code Playgroud)

wpf xaml focus keyboard-navigation tabindex

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

在运行时切换wpf资源字典

我正在尝试构建一个允许用户在运行时更改主题的wpf应用程序.到目前为止我所做的是创建一个resourcedictionary,其中包含在其中定义的应用程序的所有颜色,然后我绑定到xaml中的这个字典.

下面是我切换资源字典的代码:

if (System.IO.File.Exists(fileName))
{
   using (FileStream fs = new FileStream(fileName, FileMode.Open))
   {
      ResourceDictionary dic = (ResourceDictionary)XamlReader.Load(fs);
      Resources.MergedDictionaries.Clear();
      Resources.MergedDictionaries.Add(dic);
   }
}
Run Code Online (Sandbox Code Playgroud)

这段代码运行正常,我知道它正在切换资源字典,但它不会更新已经显示在屏幕上的元素.我的问题是:我如何刷新或重新绑定屏幕以考虑新的资源字典?

谢谢

SM

c# data-binding wpf xaml resourcedictionary

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

Objective-C,引用的属性

这可能是iPhone特有的,我不确定.在为模拟器构建时,编译器不会抱怨,但在编译设备时,当我尝试设置对象引用的属性时,它会抛出一些时髦的错误.例如,

@property (nonatomic) CGRect  &finalFrame;
Run Code Online (Sandbox Code Playgroud)

和coressponding合成器

@synthesize finalFrame;
Run Code Online (Sandbox Code Playgroud)

对于声明为的变量

CGRect finalFrame;
Run Code Online (Sandbox Code Playgroud)

给出错误

  • "finalFrame"属性的类型与ivar"finalFrame"的类型不匹配
  • 不可识别的insn:
  • 内部编译器错误:总线错误
  • 内部编译器错误:在extract_insn中,在recog.c:2904

但是,我可以手动执行它,没有问题,使用以下方法:

- (CGRect&)finalFrame;
- (void)setFinalFrame:(CGRect&)aFrame;
Run Code Online (Sandbox Code Playgroud)

这是一个gcc bug吗?它确实为模拟器编译.

iphone gcc objective-c

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

SharePoint无法在Windows 2008上加载C++ DLL

我有一个SharePoint DLL,它可以执行一些许可,并且作为代码的一部分,它使用外部C++ DLL来获取硬盘的序列号.

当我在Windows Server 2003上运行此应用程序时,它可以正常工作,但在Windows Server 2008上,整个站点(加载时加载)会不断崩溃和重置.这不是Windows Server 2008 R2,而是64位或32位相同.

如果我Debugger.Break在DLL执行之前放置一个,那么我看到代码到达中断点,然后再也不会再回到DLL中.我确实从函数内部获得了一些调试断言警告,仅在Windows Server 2008中,但我不确定这是否相关.

我创建了一个运行C#DLL的控制台应用程序,后者又加载了C++ DLL,这在Windows Server 2008上完美运行(尽管它确实显示了断言错误,但我现在已经压制了这些).断言错误不是在我的代码中,而是在我的代码中ICtypes.c,而不是我可以调试的东西.

如果我在DLL中放置一个断点,它永远不会被命中,编译器说:

"step in: Stepping over non user code"
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用Visual Studio调试DLL.

我试过包装用于调用DLL的代码:

SPSecurity.RunWithElevatedPrivileges(delegate()
Run Code Online (Sandbox Code Playgroud)

但这也无济于事.

我有这个DLL的源代码,所以这不是一个问题.

如果我从目录中删除DLL,我会收到有关缺少DLL的错误.如果我更换它,请回到没有错误或警告完全失败.

如果我用硬编码字符串替换此代码,整个应用程序工作正常.

任何建议都将非常感激,我无法理解为什么它作为控制台应用程序工作,而不是由SharePoint运行.这是在同一台机器上使用相同的用户帐户...

这是用于调用DLL的代码:

 [DllImport("idDll.dll", EntryPoint = "GetMachineId", SetLastError = true)]
    extern static string GetComponentId([MarshalAs(UnmanagedType.LPStr)]String s);

    public static string GetComponentId()
    {
        Debugger.Break();
        if (_machine == string.Empty)
        {
            string temp = "";
            id= ComponentId.GetComponentId(temp);
        }
        return id;
    }
Run Code Online (Sandbox Code Playgroud)

c# c++ sharepoint dllimport

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

合并时忽略文件/文件夹

我目前正在使用SVN对我的软件项目进行版本控制.在一个正在进行的项目中,我有一个主干,用于客户端的常用功能,规范和分支,用于客户特定的.

有没有办法在每次执行此类操作时标记一些不应合并到分支的文件/文件夹?

svn merge

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