Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rails 2.3.8:获取记录时出错,因为MySQL不区分大小写,Rails区分大小写_Mysql_Ruby On Rails_Activerecord_Case Sensitive - Fatal编程技术网

Rails 2.3.8:获取记录时出错,因为MySQL不区分大小写,Rails区分大小写

Rails 2.3.8:获取记录时出错,因为MySQL不区分大小写,Rails区分大小写,mysql,ruby-on-rails,activerecord,case-sensitive,Mysql,Ruby On Rails,Activerecord,Case Sensitive,我有两个一对一关系的模型(示例是简化的,而不是真实的模型) 我猜这是Rails 2.3.8的错误。 这个问题有简单的解决办法吗 谢谢 不,这不是Rails错误或Ruby错误-Ruby字符串区分大小写,所以您不应该期望它按原样工作 这是一种糟糕的数据库设计,但如果您想继续走这条疯狂之路,请在每个名称强制为小写的表中添加一个单独的列lower_name,并将其用作AR关联链接。(最干净的解决方案是在每个模型上的_save过滤器之前放置一个,以便在名称更改时更新较低的_name。不,这不是Rails错

我有两个一对一关系的模型(示例是简化的,而不是真实的模型)

我猜这是Rails 2.3.8的错误。 这个问题有简单的解决办法吗


谢谢

不,这不是Rails错误或Ruby错误-Ruby字符串区分大小写,所以您不应该期望它按原样工作


这是一种糟糕的数据库设计,但如果您想继续走这条疯狂之路,请在每个名称强制为小写的表中添加一个单独的列
lower_name
,并将其用作AR关联链接。(最干净的解决方案是在每个模型上的_save过滤器之前放置一个
,以便在名称更改时更新
较低的_name

不,这不是Rails错误或Ruby错误-Ruby字符串区分大小写,因此您不应该期望它按原样工作


这是一种糟糕的数据库设计,但如果您想继续走这条疯狂之路,请在每个名称强制为小写的表中添加一个单独的列
lower_name
,并将其用作AR关联链接。(最干净的解决方案是在每个型号上保存过滤器之前放置一个
,以便在名称更改时更新
lower\u name

您可以发布控制器代码和真实型号吗?它们是保密的,但在原始代码中实际上是相同的。只是不同的型号名称。您的数据库设计似乎假设不可能有两个同名的人。。。这就是为什么你应该用id引用。@sscirrus:正如我所说的,这是一个简化的例子。对于原始模型,两个对象将永远不会有相同的名称,并且这在模型中的两个键上也是强制执行的。您可以发布控制器代码和真实模型吗?它们是机密的,但在原始代码中实际上是相同的。只是不同的型号名称。您的数据库设计似乎假设不可能有两个同名的人。。。这就是为什么你应该用id引用。@sscirrus:正如我所说的,这是一个简化的例子。对于原始模型,两个对象将永远不会有相同的名称,并且这在模型中的两个键上也是强制的。谢谢!此设计是产品团队针对特定情况需求的结果。尽管设计有点糟糕,但我仍然认为这是一个ROR错误,因为Rails没有准备好让DB返回的结果超过Rails愿意接受的结果,从而导致异常。@Nadav,请记住Rails是固执己见的软件。(MySQL也是一种固执己见的软件,它通常不关心用户的期望。)虽然MySQL的ActiveRecord适配器可能会对键列类型进行内省,并在丢弃大小写后才比较字符串,但这会降低绝大多数使用“正常”模式的Rails+MySQL应用程序的适配器速度。您可以在应用程序中扩展ActiveRecord MySQL适配器来处理此场景。谢谢!此设计是产品团队针对特定情况需求的结果。尽管设计有点糟糕,但我仍然认为这是一个ROR错误,因为Rails没有准备好让DB返回的结果超过Rails愿意接受的结果,从而导致异常。@Nadav,请记住Rails是固执己见的软件。(MySQL也是一种固执己见的软件,它通常不关心用户的期望。)虽然MySQL的ActiveRecord适配器可能会对键列类型进行内省,并在丢弃大小写后才比较字符串,但这会降低绝大多数使用“正常”模式的Rails+MySQL应用程序的适配器速度。您始终可以在应用程序中扩展ActiveRecord MySQL适配器来处理此场景。
class Person < ActiveRecord::Base
  belongs_to :student, :foreign_key => 'name', :primary_key => 'full_name'
end

class Student < ActiveRecord::Base
  belongs_to :person, :foreign_key => 'full_name', :primary_key => 'name'
end
NoMethodError (You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each):
  vendor/rails/activerecord/lib/active_record/association_preload.rb:155:in `set_association_single_records'
...