我要在网页中显示数据库 (SQL SERVER 2005) 表中的行。这些行包含一个 statusID(外键),它由 Status 表(例如 id、name、modifiedDate)进一步定义。
各种状态应该以不同的方式显示(假设它们只是具有不同的背景颜色)。
我正在使用 php 查询数据库,并构建网页表。在构建表格时,我将根据该行的状态将一个 css 类应用于一个元素。
我至少有两个选择:
在 php 中定义代码逻辑来处理它,如果数据库中的状态发生变化,我将不得不更改代码。
将“类”存储在数据库中,并简单地应用已存储的类。
后一种选择对我来说似乎更好,但我不确定将表示数据嵌入数据库是否是一个糟糕的设计选择。这将是我创建多个 Intranet 实用程序的基础,我想从右脚开始。
最佳答案
在数据库中存储任何数据都没有错,包括演示数据。如果它可以帮助您产生有效的结果,同时编写更少的代码,那么这是一个很好的做法。您需要确保不要将表示逻辑 与数据库逻辑 混合在一起。
您可以通过将表示层的数据封装在 elementInfo 对象的属性中(例如)来确保将这些关注点分开。
由于您正在谈论的是一个 CSS 类,因此该演示数据 应与业务数据 分开保存。因此,虽然将演示数据和业务数据都存储在数据库中是可以的,但将它们存储在同一个表中是 Not Acceptable 。
更新回复:评论 不,您不应该在业务对象上添加 PresentationClassRecord 的 Id 作为 FK。我在下面制作了一个数据库方法示例。我将 DummyTable 称为您的业务对象,其余的遵循规范。最相关的部分是 StatusPresentationAssignmentTable
-----------------------------------------------
DummyTable
-----------------------------------------------
Id Name SomeOtherDataField StatusId
PK int varchar int FK int
-----------------------------------------------
StatusTable
-----------------------------------------------
Id Name ModifiedDate
PK int varchar datetime
-----------------------------------------------
PresentationTable
-----------------------------------------------
Id PresentationType Value
PK int varchar
sample data:
43 CssClass prettyBackground
-----------------------------------------------
StatusPresentationAssignmentTable
-----------------------------------------------
StatusId PresentationId
FK int FK int
现在,通过两个简单的连接子句,您可以获得演示数据,并且它与您的业务数据完全分离。您的脚本可以做一些事情,比如检查假人的状态是否有任何演示分配。如果是,则它会查看 PresentationType,获取适当的函数以将演示数据应用于演示,然后执行它。 (您需要为每个知道如何处理该值的 PresentationType 设置一个函数 - 可以用类似 function applyPresentationValue(presentationElement, presentationType, presentationValue) 之类的东西封装的东西调用不同的函数 applyCssClass(presentationElement, value) 如果 presentationType == "CssClass" )。
关于php - 可以将演示数据存储在数据库中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5822748/
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html
我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的
我正在阅读SandiMetz的POODR,并且遇到了一个我不太了解的编码原则。这是代码:classBicycleattr_reader:size,:chain,:tire_sizedefinitialize(args={})@size=args[:size]||1@chain=args[:chain]||2@tire_size=args[:tire_size]||3post_initialize(args)endendclassMountainBike此代码将为其各自的属性输出1,2,3,4,5。我不明白的是查找方法。当一辆山地自行车被实例化时,因为它没有自己的initialize方法
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI
我喜欢使用Textile或Markdown为我的项目编写自述文件,但是当我生成RDoc时,自述文件被解释为RDoc并且看起来非常糟糕。有没有办法让RDoc通过RedCloth或BlueCloth而不是它自己的格式化程序运行文件?它可以配置为自动检测文件后缀的格式吗?(例如README.textile通过RedCloth运行,但README.mdown通过BlueCloth运行) 最佳答案 使用YARD直接代替RDoc将允许您包含Textile或Markdown文件,只要它们的文件后缀是合理的。我经常使用类似于以下Rake任务的东西: