Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.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
Ruby on rails 行为怪异的活动记录_Ruby On Rails_Ruby_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 行为怪异的活动记录

Ruby on rails 行为怪异的活动记录,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,问题:以下代码是否有问题 控制器测试 上面的操作将检索我查询的行 但是下面我试图从上面获取x.owner\u id的数据,但失败了,显然owner\u id是上面返回的查询中的一列 irb(main):005:0> x.owner_id NoMethodError: undefined method `owner_id' for #<Notations::ActiveRecord_Relation:0x007fb83cecf288> from /Users/progra

问题:以下代码是否有问题

控制器测试

上面的操作将检索我查询的行

但是下面我试图从上面获取x.owner\u id的数据,但失败了,显然owner\u id是上面返回的查询中的一列

irb(main):005:0> x.owner_id
NoMethodError: undefined method `owner_id' for #<Notations::ActiveRecord_Relation:0x007fb83cecf288>
    from /Users/programmer/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activerecord-4.2.8/lib/active_record/relation/delegation.rb:136:in `method_missing'
    from /Users/programmer/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activerecord-4.2.8/lib/active_record/relation/delegation.rb:99:in `method_missing'
    from (irb):5
    from /Users/programmer/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/railties-4.2.8/lib/rails/commands/console.rb:110:in `start'
    from /Users/programmer/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/railties-4.2.8/lib/rails/commands/console.rb:9:in `start'
    from /Users/programmer/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/railties-4.2.8/lib/rails/commands/commands_tasks.rb:68:in `console'
    from /Users/programmer/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/railties-4.2.8/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
    from /Users/programmer/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/railties-4.2.8/lib/rails/commands.rb:17:in `<top (required)>'
    from bin/rails:4:in `require'
    from bin/rails:4:in `<main>'

您正在调用ActiveRecord::Relation上的属性,而必须在Notations实例上调用它

注意:鉴于上面的代码必须适合您,我建议按照ruby标准进行一些更改

模型名称必须是单数符号,而不是符号 列名必须使用小写的owner\u id,而不是owner\u id
您正在调用ActiveRecord::Relation上的属性,而必须在Notations实例上调用它

注意:鉴于上面的代码必须适合您,我建议按照ruby标准进行一些更改

模型名称必须是单数符号,而不是符号 列名必须使用小写的owner\u id,而不是owner\u id
我发现了问题。db的列名为大写,因此:

 y = x.owner_id # failure
 y = x.OWNER_ID # success

 irb(main):004:0> x.OWNER_ID
 => "00003"
解决方案: 使用初始值设定项使用小写模式反射:

ActiveRecord::ConnectionAdapters::SQLServerAdapter.lowercase_schema_reflection = true
所以现在:

x = Notations.all.first 
    irb(main):002:0> x = Notations.all.first
/Users/programmer/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activerecord-sqlserver-adapter-4.2.18/lib/active_record/connection_adapters/sqlserver/database_statements.rb:354: warning: :timezone option must be :utc or :local - defaulting to :local
  Notations Load (1.9ms)  EXEC sp_executesql N'SELECT  [notation].* FROM [notation]  ORDER BY [notation].[owner_id] ASC OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY'

irb(main):003:0> x.owner_id
=> "00003"
irb(main):004:0> 

正如您在上面看到的,添加初始值设定项有效,它将列更改为小写。我同意把我的专栏放在小写的位置。但是我无法更改它们,因为此数据库与我公司的ERP系统一起使用

我发现了问题。db的列名为大写,因此:

 y = x.owner_id # failure
 y = x.OWNER_ID # success

 irb(main):004:0> x.OWNER_ID
 => "00003"
解决方案: 使用初始值设定项使用小写模式反射:

ActiveRecord::ConnectionAdapters::SQLServerAdapter.lowercase_schema_reflection = true
所以现在:

x = Notations.all.first 
    irb(main):002:0> x = Notations.all.first
/Users/programmer/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activerecord-sqlserver-adapter-4.2.18/lib/active_record/connection_adapters/sqlserver/database_statements.rb:354: warning: :timezone option must be :utc or :local - defaulting to :local
  Notations Load (1.9ms)  EXEC sp_executesql N'SELECT  [notation].* FROM [notation]  ORDER BY [notation].[owner_id] ASC OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY'

irb(main):003:0> x.owner_id
=> "00003"
irb(main):004:0> 

正如您在上面看到的,添加初始值设定项有效,它将列更改为小写。我同意把我的专栏放在小写的位置。但是,我无法更改它们,因为此数据库与我公司的ERP系统一起使用

仍然不起作用我发现了原因@Deepak MahakaleI在下面回答了它与区分大小写有关你知道ActiveRecord是否可以忽略大小写吗@Deepak MahakaleThat仍然不起作用我发现了它的原因@Deepak MahakaleI在下面回答说它与区分大小写有关你知道ActiveRecord是否可以忽略大小写吗@Deepak MahakaleWhy您希望所有人都返回一个特定实例?它返回所有符号的列表。您不能在列表上调用owner_id,必须首先选择一个特定的符号-例如,第一个:Notation.first这是我的错,我从终端上截取了错误的命令,应该是x=Notations.all.first@spickermannowy为什么用大写字母命名列,而不遵循Rails惯例?为什么希望所有列都返回一个特定实例?它返回所有符号的列表。你不能在列表中调用owner_id,你必须首先选择一个特定的符号-例如,first:notation.first这是我的错,我从终端上截取了错误的命令,它应该是x=Notations.all.first@spickermannw你为什么用大写字母命名列而不遵循Rails惯例?这是问题的答案吗?还是另一个问题?我已经建议,上面我会说,如果这是一个新的代码,请遵循标准,以避免未来的灾难这是一个问题的答案吗?还是另一个问题?我已经建议上面我会说,如果这是一个新的代码,请遵循标准,以避免将来发生灾难