小编tro*_*skn的帖子

如果一个孩子是特殊情况,我如何最好地代表一对多的关系?

我有一个在两个实体之间具有父子关系的模式.它是一对多的,所以自然会被实现为:

table Parents
  id

table Children
  id
  parent_id
Run Code Online (Sandbox Code Playgroud)

但是,我还需要将其中一个孩子视为一个特殊情况(让我们称之为"晋升"的孩子).我可以想到几种方法,包括:

只需输入一个属性Children:

table Parents
  id

table Children
  id
  parent_id
  is_promoted
Run Code Online (Sandbox Code Playgroud)

这显然是有缺陷的,因为数据库不能保证一致性(至少不能通过常规外键约束)

Parents表上创建一个外键:

table Parents
  id
  promoted_child_id

table Children
  id
  parent_id
Run Code Online (Sandbox Code Playgroud)

这是我的第一个倾向,但它确实有一个循环依赖的明显缺点,所以可能不是最优的.

我能想到的另一个选择是在Children桌面上放置第二个外键:

table Parents
  id

table Children
  id
  parent_id
  promoted_parent_id
Run Code Online (Sandbox Code Playgroud)

这允许我放置唯一索引,从而强制数据库一致性.这样做的一个问题是,有可能产生无意义的关系,其中父母A的孩子列为父母B的提升者.

我能想到的最后一个选项是创建一个中间表,例如:

table Parents
  id

table Children
  id

table ParentChildRelationship
  parent_id
  child_id
  is_promoted
Run Code Online (Sandbox Code Playgroud)

同样,我可以在parent_id+ 上声明一个唯一约束is_promoted,强制执行一致性.我对这个问题有点矛盾,因为将关系推广到一个完整的实体似乎有些过分,尽管我把它放在它上面的那一刻(实质上is_promoted就是这个),我想这是有道理的.

我想知道你会考虑用什么方法来处理这个问题.特别是,我正在使用Rails,因此可能会影响最实用的解决方案.

database ruby-on-rails cardinality

6
推荐指数
1
解决办法
429
查看次数

我如何在计划中附加一个alist?

将元素添加到alist(关联列表)的头部很简单:

> (cons '(ding . 53) '((foo . 42) (bar . 27)))
((ding . 53) (foo . 42) (bar . 27))
Run Code Online (Sandbox Code Playgroud)

附加到alist的尾部有点棘手.经过一些实验,我制作了这个:

> (define (alist-append alist pair) `(,@alist ,pair))
> (alist-append '((foo . 42) (bar . 27)) '(ding . 53))
'((foo . 42) (bar . 27) (ding . 53))
Run Code Online (Sandbox Code Playgroud)

但是,在我看来,这不是惯用的解决方案.那么这通常如何在计划中完成?或者这实际上是这样的吗?

lisp scheme list associative

5
推荐指数
2
解决办法
2871
查看次数

将ActionMailer限制为一个域

我有一个在临时环境中运行的rails应用程序,它是生产的准确副本.我希望能够使用ActionMailer发送邮件,以测试它是否正常工作,但为了防止任何错误,我非常希望能够限制邮件程序发送到任何不在的地址我自己的域名.

似乎ActionMailer从开始就不支持这个,但是有插件还是某种类型的补丁,可以做到这一点?

ruby ruby-on-rails

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

最佳原则原则

我似乎遇到了很多设计问题,我从来不知道什么是真正合适的.一方面,我经常听到我应该限制耦合并坚持单一责任,但是当我这样做时,我经常发现在需要时很难将信息提供给程序的一部分.例如,

class Singer
  def initialize(name)
    @name = name
  end
  attr :name
end
Run Code Online (Sandbox Code Playgroud)

宋应该是:

class Song
  def new(singer)
    @singer = singer
  end
end
Run Code Online (Sandbox Code Playgroud)

要么

class Song
  def new(singer_name)
    @singer_name = singer_name
  end
end
Run Code Online (Sandbox Code Playgroud)

后者的耦合较少,所以根据原则我应该使用它.但如果我后来发现宋某需要了解更多有关歌手的事情,那我就是一个糟糕的方式.例如

 class Song
   ...
   def play
     puts "Belting it out by #{@singer.name}, winner of
     #{@singer.grammy_count} grammies!"
   end
 end
Run Code Online (Sandbox Code Playgroud)

如果我使用了后来的Song类而不是前者,我会解决这个问题.但后来我怀疑有人会提醒我SRP,单一责任原则,并建议:

  class SongPlayer
    def initialize(singer, song)
      @singer, @song = singer, song
    end
    def play
      puts "Belting it out by #{@singer.name}, winner of
      #{@singer.grammy_count} grammies!"
    end
  end
Run Code Online (Sandbox Code Playgroud)

是的,我想这是有道理的,因为另一个歌手可能会掩盖别人的歌,对吗?但那么,它真的会是完全相同的歌吗?在我的大多数情况下,它永远不会是相同的"歌曲"所以我从来没有这种情况.那么SRP值得为代码带来额外的类吗?

我有时认为许多OOP原则(SOLID或其他原因)都会产生Java的局限性,并且不适用于Ruby.

ruby oop

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

如何在PHP Shell_exec中正确处理空格?

我通过cmd-line运行win2003服务器,PHP 526.

我有一个cmdline字符串:

$cmd = '  "d:\Prog Files\foo.exe" -p "d:\data path\datadir"  ';  
Run Code Online (Sandbox Code Playgroud)

试图在PHP代码中执行此操作

$out = `$cmd`;       # note use of backticks AKA shell_exec
Run Code Online (Sandbox Code Playgroud)

foo.exe导致失败,因为它将-p arg解释为"d:\ data".

但是,$cdm复制到Windows shell cmdline 的相同字符串会成功执行.

如何在PHP中正确处理空格shell_exec

php shell-exec

4
推荐指数
1
解决办法
5636
查看次数

如何获得维度(自定义变量)的结果,其中未设置值?

我正在使用自定义变量来跟踪订单ID.为了将分析数据聚合到数据仓库中,我想选择一些自定义变量作为维度的指标.但是,如果我这样做,我将无法获得未设置变量的条目(例如,未导致销售的会话).我也需要得到这些.

我可以编写一个过滤器或段,只选择没有特定自定义变量的条目吗?我试过了:

segment=dynamic::ga:customVarValue1==
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用(它没有给出任何结果).

基本上我在寻找与where ga:customVarValue1 is nullsql 相当的东西.

google-analytics google-analytics-api

4
推荐指数
1
解决办法
4256
查看次数

如何调试Ruby google-api-client的HTTP

我正在尝试使用google-api-client与Google云端硬盘集成.由于有很多东西正在进行,我希望能够看到线路上的内容(http级别).似乎客户端使用Faraday进行http连接.我如何从法拉第中获取线速调试?

ruby faraday google-drive-api

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

哈希 - >数组的棘手变换

我有这样的结构:

{:foo => ['foo1', 'foo2'], :bar => ['bar1']}
Run Code Online (Sandbox Code Playgroud)

我想转变成:

[[:foo, "foo1"], [:foo, "foo2"], [:bar, "bar1"]]
Run Code Online (Sandbox Code Playgroud)

我目前的解决方案势在必行:

result = []
h.each do |k,v|
  v.each do |value|
    result << [k, value]
  end
end
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但我确信有更优雅的方式来写这个,但我无法弄清楚.我想知道面向功能的解决方案是什么样的?

ruby arrays hash functional-programming

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

红宝石handsoap文档

有没有人知道一些关于红宝石"handsoap"宝石的好文档让我入门?

谢谢

ruby soap ruby-on-rails handsoap

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

如何在PHP中找到每个可能的数组组合

$data = array(
'a' => array('a1', 'a2', 'a3'),
'b' => array('b1', 'b2', 'b3', 'b4'),
'c' => array('c1', 'c2', 'c3', 'c4', 'c5'));
Run Code Online (Sandbox Code Playgroud)

要得到

a1
a2
a3
b1
b2
b3
b4
c1
c2
c3
c4
c5

a1 b1
a1 b2
a1 b3
a1 b4
a1 c1
a1 c2
a1 c3
a1 c4
a1 c5

b1 c1
b1 c2
b1 c3
b1 c4
b1 c5
b2 c1
b2 c2
b2 c3
b2 c4
b2 c5
b3 c1
b3 c2
b3 c3
b3 c4 …
Run Code Online (Sandbox Code Playgroud)

php arrays permutation

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

将字符串编码为utf8

如何使用.NET(VB或C#)轻松地将字符串编码为utf8?例如,我需要编码一个像"This(is)my string"这样的字符串,结果应该是一个字符串"This +%28is%29 + my + string".

TIA

J.P

.net encode urlencode

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

if else语句比较0或NA

我在数据帧tmp中有一个元素,可能包含数字,0或NA.如果该元素既不是0也不是NA,我想要发生一些事情.否则,没有任何反应.我想它看起来像这样:

  if ( tmp[2, 19] != (0 || NA) ){  
              do something
              } 
Run Code Online (Sandbox Code Playgroud)

我收到此错误:if(tmp [2,19] ==(0 || NA)){:缺少值需要TRUE/FALSE时出错.我不知道在R中是否不可能将某些东西与int和字符串进行比较,或者我只是使用OR运算符错误.我在不同情况下尝试了不同的变化,但无法确定问题.请帮忙!

if-statement r

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