我有一个模型表示Content包含一些图像的项目.图像的数量是固定的,因为这些图像参考非常特定于内容.例如,Content模型将模型引用Image两次(轮廓图像和背景图像).我试图避免泛型has_many,并坚持多个has_one.当前的数据库结构如下所示:
contents
- id:integer
- integer:profile_image_id
- integer:background_image_id
images
- integer:id
- string:filename
- integer:content_id
Run Code Online (Sandbox Code Playgroud)
我在这里无法弄清楚如何正确设置关联.该Content模型可以包含两个belongs_to对a的引用Image,但这似乎在语义上不正确,因为理想情况下图像属于内容,或者换句话说,内容具有两个图像.
这是我能想到的最好的(通过打破语义):
class Content
belongs_to :profile_image, :class_name => 'Image', :foreign_key => 'profile_image_id'
belongs_to :background_image, :class_name => 'Image', :foreign_key => 'background_image_id'
end
Run Code Online (Sandbox Code Playgroud)
我离开了,有更好的方法来实现这种关联吗?
为了让事情变得有趣并且关闭我最后的开放式问题,以一种合理的架构以良好的组织方式实现以下功能的解决方案获得了很好的赏金.完整的代码是在jsfiddle,随时问任何问题:)
您通常如何组织客户端极其丰富的复杂Web应用程序.我已经创建了一个人为的例子来表明如果对于大型应用程序来说管理不好的话,它很容易陷入混乱状态.随意修改/扩展此示例 - http://jsfiddle.net/NHyLC/1/
该示例基本上反映了SO上的评论发布部分,并遵循以下规则:
Add Comment单击,但在删除多个空格后大小小于15,则显示带有错误的弹出窗口.我在这个例子中注意到了几个问题.
你会如何清理它?沿途应用一点MVC/MVP?
这里有一些相关的函数,但如果你在jsfiddle上看到整个代码会更有意义:
/**
* Handle comment change.
* Update character count.
* Indicate progress
*/
function handleCommentUpdate(comment) {
var status = $('.comment-status');
status.text(getStatusText(comment));
status.removeClass('mild spicy hot sizzling');
status.addClass(getStatusClass(comment));
}
/**
* Is the comment valid for submission
* But first, check if it's all good.
*/
function commentSubmittable(comment) {
var notTooSoon = !isTooSoon();
var notEmpty = !isEmpty(comment);
var hasEnoughCharacters = !isTooShort(comment);
return notTooSoon …Run Code Online (Sandbox Code Playgroud) javascript design-patterns web-applications code-organization
Rails 3.1的发布版本在预编译带有扩展名的sass清单文件时遇到了一些奇怪的问题scss.奇怪的是,默认的清单文件application.scss编译得很好,我看到它public/assets/.
但是,当我尝试编译自定义清单文件时,不会创建任何内容.我在生产配置中启用了预编译选项.
config.assets.precompile += %w( user.scss admin.scss )
Run Code Online (Sandbox Code Playgroud)
就我所知,我正在正确运行预编译rake任务.
rake assets:precompile RAILS_ENV=production
Run Code Online (Sandbox Code Playgroud)
也许这有帮助.当我使用扩展名css而不是scss创建两个新的清单文件并且需要其中的原始scss文件时,这些新的清单文件将得到尊重并正确编译.为什么application.scss得到这种特殊处理而不是其他sass清单文件?
ruby-on-rails sass ruby-on-rails-3.1 sprockets asset-pipeline
我正在使用NSDateFormatter来解析iPhone上的RFC 822日期.但是,无法在日期格式中指定可选元素.RFC 822规范中有几个可选部分,它们打破了日期解析器.如果没有任何效果,我可能必须编写一个自定义解析器来遵守规范.
例如,规范中的日期名称是可选的.所以这两个日期都是有效的:
Tue, 01 Dec 2009 08:48:25 +0000 解析格式EEE, dd MMM yyyy HH:mm:ss z
01 Dec 2009 08:48:25 +0000是用格式解析的dd MMM yyyy HH:mm:ss z
这就是我目前使用的:
+ (NSDateFormatter *)rfc822Formatter {
static NSDateFormatter *formatter = nil;
if (formatter == nil) {
formatter = [[NSDateFormatter alloc] init];
NSLocale *enUS = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[formatter setLocale:enUS];
[enUS release];
[formatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss z"];
}
return formatter;
}
+ (NSDate *)dateFromRFC822:(NSString *)date {
NSDateFormatter *formatter = [NSDate rfc822Formatter];
return …Run Code Online (Sandbox Code Playgroud) for (var i = 0; i < somearray.length; i++)
{
myclass.foo({'arg1':somearray[i][0]}, function()
{
console.log(somearray[i][0]);
});
}
Run Code Online (Sandbox Code Playgroud)
如何将somearray或其中一个索引传递给匿名函数?somearray已经在全球范围内,但我仍然得到一些[i]未定义
我试图弄清楚如何在jQuery的click()事件期间创建的函数中存储外部变量值.这是我正在使用的代码示例.
for(var i=0; i<3; i++){
$('#tmpid'+i).click(function(){
var gid = i;
alert(gid);
});
}
<div id="tmpid0">1al</div>
<div id="tmpid1">asd</div>
<div id="tmpid2">qwe</div>
Run Code Online (Sandbox Code Playgroud)
所以发生的事情是事件正确附着,但'gid'的值始终是'i'的最后一个递增值.我不确定如何在这种情况下设置私有变量.
什么是报告JavaScript中的错误而不是依赖于null的好方法,以及当错误发生且函数无法继续前进时的未定义.我可以想到三种方法:
这是一个简单的示例场景 - 一个函数,用于记入传入的用户帐户.该函数credit是Account对象的一部分.
这是天真的解决方案.
function credit(amount) {
this.balance += amount;
}
Run Code Online (Sandbox Code Playgroud)
这种方法的一个主要问题是无效数据.让我们修复它,并使用返回值来指示操作失败.
function credit(amount) {
if(!isInt(amount)) {
return false;
}
this.balance += amount;
}
Run Code Online (Sandbox Code Playgroud)
这是对前一个的改进,但客户端代码必须检查返回值以确保操作成功.对基本上系统中的每个方法执行此操作可能会变得很麻烦.
if(!johnDoe.credit(100)) {
// do some error handling here
}
Run Code Online (Sandbox Code Playgroud)
第三种方法,类似于第二种方法,是抛出异常.由于我们自己抛出异常,因此可能抛出特定类型的异常而不是普通异常.
function credit(amount) {
if(!isInt(amount)) {
throw new InvalidAmountError(amount);
}
this.balance += amount;
}
Run Code Online (Sandbox Code Playgroud)
类似于抛出异常的第四种方法是在代码中使用断言.与上述方法相比的一个缺点是,由于断言是通用的,因此我们失去了抛出自定义异常的能力.尽管通过传递对象来抛出每个断言调用仍然是可能的.
function credit(amount) {
assert(!isInt(amount), "Amount to credit is not an integer");
this.balance += amount;
}
Run Code Online (Sandbox Code Playgroud)
全局assert函数易于编写,使代码更短.
function assert(value, message) {
if(value …Run Code Online (Sandbox Code Playgroud) 创建实例变量意味着什么,例如@foo在任何类定义之外的文件中.假设有一个文件test.rb,下面给出了该文件的全部内容.
# test.rb
@foo = "bar"
puts @foo
Run Code Online (Sandbox Code Playgroud)
它打印"bar",但这是某种包装类中的实例变量吗?
使用两个文件进行测试表明存在一个main包含所有内容的对象.这种理解是否正确?
a.rb的内容
@me = self
@a = "from-a"
Run Code Online (Sandbox Code Playgroud)
b.rb的内容
require "./a"
@b = "from-b"
puts @me == self # true (self refers to the same object)
puts self.class # Object
puts self.instance_variables # [@a, @b, @me]
Run Code Online (Sandbox Code Playgroud) 在回答有关Java使用示例的问题时,我碰到了一些文章,其中NASA使用Java进行火星任务中的地面控制,但我无法确定它是否曾在地球之外使用过.你知道任何这种情况吗?
我对微软采访中的一个问题感到困惑,如下所示:
一个函数应该接受一个范围(3 - 21),它应该打印所有连续的数字组合,形成如下给出的每个数字:
3 = 1+2 5 = 2+3 6 = 1+2+3 7 = 3+4 9 = 4+5 10 = 1+2+3+4 11 = 5+6 12 = 3+4+5 13 = 6+7 14 = 2+3+4+5 15 = 1+2+3+4+5 17 = 8+9 18 = 5+6+7 19 = 9+10 20 = 2+3+4+5+6 21 = 10+11 21 = 1+2+3+4+5+6
你能帮我在C#中形成这个序列吗?
谢谢,马赫什