我在GitHub上有一个现有的Rails应用程序并部署在Heroku上.我正在尝试建立一个新的开发机器,并从我的GitHub存储库中克隆了该项目.但是,我很困惑如何将此文件夹链接到Heroku.最初,我使用了heroku create
命令,但显然我这次不想这样做,因为它会创建另一个Heroku实例.
我正在尝试使用Html.DropDownList
扩展方法,但无法弄清楚如何将它与枚举一起使用.
假设我有一个这样的枚举:
public enum ItemTypes
{
Movie = 1,
Game = 2,
Book = 3
}
Run Code Online (Sandbox Code Playgroud)
如何使用Html.DropDownList
扩展方法创建包含这些值的下拉列表?
或者我最好的办法是简单地创建一个for循环并手动创建Html元素?
我在之前的迁移中创建了一个日期列,并将其设置为可为空.现在我想把它改成不可空.假设该数据库中有空行,我该怎么做呢?如果它们当前为空,我可以将这些列设置为Time.now.
假设您有一个名为Customer的类,其中包含以下字段:
我们还要说,根据您的业务逻辑,所有Customer对象都必须定义这四个属性.
现在,我们可以通过强制构造函数指定每个属性来轻松地完成此操作.但是,当您被迫向Customer对象添加更多必需字段时,很容易看出它会如何失控.
我已经看到了在构造函数中加入20多个参数的类,使用它们只是一种痛苦.但是,或者,如果您不需要这些字段,则可能会遇到未定义信息的风险,或者更糟糕的是,如果您依赖调用代码来指定这些属性,则会引发对象引用错误.
有没有替代方案,或者你只需要决定X的构造函数参数是否太多,你不能忍受?
我目前正在ASP.NET MVC应用程序中使用log4net来记录异常.我这样做的方法是让我的所有控制器继承自BaseController类.在BaseController的OnActionExecuting事件中,我记录可能发生的任何异常:
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
// Log any exceptions
ILog log = LogManager.GetLogger(filterContext.Controller.GetType());
if (filterContext.Exception != null)
{
log.Error("Unhandled exception: " + filterContext.Exception.Message +
". Stack trace: " + filterContext.Exception.StackTrace,
filterContext.Exception);
}
}
Run Code Online (Sandbox Code Playgroud)
如果在控制器操作期间发生未处理的异常,则此方法很有用.
至于404错误,我在web.config中设置了自定义错误,如下所示:
<customErrors mode="On">
<error statusCode="404" redirect="~/page-not-found"/>
</customErrors>
Run Code Online (Sandbox Code Playgroud)
在处理"页面未找到"网址的控制器操作中,我记录了所请求的原始网址:
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult PageNotFound()
{
log.Warn("404 page not found - " + Utils.SafeString(Request.QueryString["aspxerrorpath"]));
return View();
}
Run Code Online (Sandbox Code Playgroud)
这也有效.
我遇到的问题是如何记录.aspx页面本身的错误.假设我在其中一个页面或某些内联代码上出现编译错误,这将导致异常:
<% ThisIsNotAValidFunction(); %>
<% throw new Exception("help!"); %>
Run Code Online (Sandbox Code Playgroud)
似乎HandleError属性正确地将其重新路由到Shared文件夹中的Error.aspx页面,但它肯定没有被我的BaseController的OnActionExecuted方法捕获.我想我可以将日志代码放在Error.aspx页面本身,但我不确定如何在该级别检索错误信息.
Derik Whitaker 几天前发表了一篇文章,这篇文章引起了我一直好奇的一段时间:控制器中是否存在业务逻辑?
到目前为止,我见过的所有ASP.NET MVC演示都将存储库访问和业务逻辑放在控制器中.有些甚至在那里抛出验证.这会导致相当大的膨胀控制器.这真的是使用MVC框架的方式吗?看起来这最终会导致很多重复的代码和逻辑分散在不同的控制器上.
甚至可以执行地址(物理,而不是电子邮件)验证?看起来大量的地址格式,即使仅在美国,也会使这个任务变得相当困难.另一方面,对于多个业务需求而言,这似乎是一项必要的任务.
我的UserMailer类有以下RSpec测试:
require "spec_helper"
describe UserMailer do
it "should send welcome emails" do
ActionMailer::Base.deliveries.should be_empty
user = Factory(:user)
UserMailer.welcome_email(user).deliver
ActionMailer::Base.deliveries.should_not be_empty
end
end
Run Code Online (Sandbox Code Playgroud)
这个测试第一次通过,但第二次运行失败了.在进行一些调试后,看起来第一个测试向ActionMailer :: Base.deliveries数组添加了一个项目,该项目从未被清除.这会导致测试中的第一行失败,因为数组不为空.
在RSpec测试之后清除ActionMailer :: Base.deliveries数组的最佳方法是什么?
我的Web应用程序使用jQuery和一些jQuery插件(例如验证,自动完成).我想知道是否应该将它们粘贴到一个.js文件中,以便可以更轻松地缓存它,或者将它们分解为单独的文件,并且只包含我需要的给定页面.
我还要提一下,我关注的不仅是下载.js文件所需的时间,还包括根据加载的.js文件的内容减慢页面的速度.例如,添加自动完成插件往往会使我的基本测试的响应时间缩短100ms,即使在缓存时也是如此.我的猜测是它必须扫描DOM中导致此延迟的元素.
我有一个表单,其中有一个"提交"按钮和一个"取消"锚点.HTML是这样的:
<input type="submit" value="Submit" />
<a href="some_url">Cancel</a>
Run Code Online (Sandbox Code Playgroud)
我希望两个人看起来和行为一样.没什么好看的,只是类似于"Ask Question"锚点在StackOverflow上看起来的样子.
我可以让两个看起来有点相似,包括边界框,背景颜色和悬停背景颜色,但我不能完全获得高度和垂直对齐以便彼此玩得很好.我发布了我的CSS但是现在这样一团糟,我认为从头开始可能更容易,让准系统的CSS布局工作,然后继续前进.
PS我知道我可以使用an而不是锚点并挂钩onClick事件来进行重定向.现在,使用锚来解决这个问题几乎是一个原则问题(此外还要考虑网络蜘蛛的考虑因素).
asp.net-mvc ×3
actionmailer ×1
asp.net ×1
c# ×1
coding-style ×1
constructor ×1
controller ×1
css ×1
git ×1
heroku ×1
html ×1
javascript ×1
migration ×1
parameters ×1
refactoring ×1
rspec ×1
unit-testing ×1
validation ×1