我现在正努力让HATBM正常工作.我有一个被打败的scanario:文章和标签.我认为,HABTM应该在这里使用,因为它是一种多对多的关系.我不知道是否应该手动创建连接表(在这种情况下为articles_tags).
我的代码目前如下:
class Article < ActiveRecord::Base
has_and_belongs_to_many :tags
end
class Tag < ActiveRecord::Base
has_and_belongs_to_many :articles
end
Run Code Online (Sandbox Code Playgroud)
运行迁移时,不会创建第3个表.另外,我想补充一点,我的第三个表没有任何域逻辑,只是盲目分配.
我正在使用Rails 2.2.2
我有一个网络应用程序,我根据他们的电子邮件ID注册用户.
从设计/易用性/灵活性的角度来看,我应该为每个用户分配一个唯一的号码还是根据emailid识别用户?
分配唯一号码的优点:
坏处:
哪个更好?您是否看到任何一个方案需要考虑的其他问题?
问题如何确保我的应用程序是线程安全的?他们的任何常见做法,测试方法,要避免的事情,要寻找的东西是什么?
背景我目前正在开发一个服务器应用程序,它在不同的线程中执行许多后台任务,并使用Indy与客户端进行通信(使用另一组自动生成的线程进行通信).由于应用程序应该是高度可用的,程序崩溃是一件非常糟糕的事情,我想确保应用程序是线程安全的.无论如何,我不时发现一段代码抛出一个以前从未发生过的异常,在大多数情况下我发现它是某种同步错误,我忘了正确地同步我的对象.因此,我的问题涉及最佳实践,线程安全测试和类似的事情.
mghie:谢谢你的回答!我或许应该更准确一点.为了清楚起见,我了解多线程的原理,我在整个程序中使用同步(监视器),我知道如何将线程问题与其他实现问题区分开来.但尽管如此,我仍然忘记不时添加适当的同步.举个例子,我在代码中使用了RTL排序功能.看起来像
FKeyList.Sort (CompareKeysFunc);
Run Code Online (Sandbox Code Playgroud)
事实证明,我必须在排序时同步FKeyList.在最初编写那么简单的代码行时,我才想起它.这是我想谈的这些问题.一个人容易忘记添加同步代码的地方有哪些?您如何确保在所有重要位置添加同步代码?
我有点等待这个问题的'不'答案.
我很感兴趣,如果你在if子句中检查变量时可以同时保存变量.
假设我有这个代码.
if(foo!=null){
if(foo.getBar()!=null){
Bar bar = foo.getBar();
System.out.println("Success: " + bar);
} else {
System.out.println("Failure.");
}
} else {
System.out.println("Failure.");
}
Run Code Online (Sandbox Code Playgroud)
我现在处理"失败"状态 - 即使结果是相同的,也是独立的.我可以这样把他们聚在一起:
if(foo!=null && foo.getBar()!=null){
Bar bar = foo.getBar();
System.out.println("Success: " + bar);
} else {
System.out.println("Failure.");
}
Run Code Online (Sandbox Code Playgroud)
已经有更简洁的代码了.如果foo为null,它将停在那里并且不会尝试foo.getBar(在if中)所以我不会得到NPE.我想要提升的最后一件事,主要问题是:我真的给过两次调用foo.getBar()吗?如果getBar()将是一个非常繁重的操作,那么离开第二个相同的调用将是很好的.所以我想知道是否有可能做一些与此类似的事情:
if(foo!=null && (Bar bar = foo.getBar())!=null){
Bar bar = foo.getBar();
System.out.println("Success: " + bar);
} else {
System.out.println("Failure.");
}
Run Code Online (Sandbox Code Playgroud)
如果我愿意,我将不得不将其分解为两个不同的if
Bar bar = foo.getBar();
if (bar!=null) ...
Run Code Online (Sandbox Code Playgroud) 我有一个巨大的文本文件,在liux上有大约400,000行80个字符.
需要"展开"文件,将四行合并成一行,最后有1/4行,每行80*4行长.
有什么建议?
在KeyDown事件中,我有KeyEventArgs可以使用.它具有(除其他外)这三个属性:
e.KeyCodee.KeyDatae.KeyValue我应该使用哪一个?
我有点惊讶的是,在学习WPF/XAML/Silverlight时,我遇到的几乎所有XAML/C#示例都在XAML中有"Click"事件,在Window或Page构造函数中很少.
由于现在所有的重点都放在"非侵入式Javascript"上,我认为更多的开发人员实际上会像这样构建他们的XAML /代码隐藏:
XAML:
<Grid>
<Button x:Name="btnEdit"/>
</Grid>
Run Code Online (Sandbox Code Playgroud)
代码背后:
public Window1()
{
InitializeComponent();
btnEdit.Content = "Edit";
btnEdit.Click += new RoutedEventHandler(btnEdit_Click);
}
private void btnEdit_Click(object sender, RoutedEventArgs e)
{
btnEdit.Content = "This button was clicked.";
}
Run Code Online (Sandbox Code Playgroud)
有关为什么这会是一个好的或坏的做法的任何想法?
[这个问题类似于这一个,但我也有兴趣在沙箱中的可能性.]
我正在考虑在我的C#/ .NET应用程序中嵌入脚本语言,然后将我的一些应用程序API暴露给脚本.似乎有很多好的选择(Lua,Boo,IronPython等),但有没有简单的选项限制脚本语言的内置函数被使用?例如,我不希望脚本能够执行I/O,除非通过我明确公开的API,因此不打印到控制台,打开文件等.这些脚本语言中的任何一种都提供了一种简单的方法这个?
我有几个返回不同通用列表的方法.
在.net中存在任何类静态方法或将任何列表转换为数据表的任何东西?我唯一可以想象的是使用Reflection来做到这一点.
如果我有这个:
List<Whatever> whatever = new List<Whatever>();
Run Code Online (Sandbox Code Playgroud)
(下一个代码当然不起作用,但我想有可能:
DataTable dt = (DataTable) whatever;
Run Code Online (Sandbox Code Playgroud) 我有一个XML解析器崩溃不完整的XML数据.因此,提供给它的XML数据可能是以下之一:
<one><two>twocontent</two</one>
<a/><b/> ( the parser treats it as two root elements )
Run Code Online (Sandbox Code Playgroud)
元素属性也被处理(虽然上面没有显示).
现在,问题是当我从套接字I中读取数据时,我会在片段中获取数据.例如:
<one>one
content</two>
</one>
Run Code Online (Sandbox Code Playgroud)
因此,在将XML发送到解析器之前,我必须构造一个有效的XML并发送它.什么编程构造(如迭代,递归等)最适合这种情况.
我用C++编程.
请帮忙.