- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个“has_many”关系的问题,我从 ActiveRecord 中得到一个随机异常:
product = Product.create!(valid_attributes)
product.prices
# throws:
NoMethodError:
undefined method `scan' for nil:NilClass
这似乎与“inverse_of”有关,但我显然做了一些 ActiveRecord 没有预料到的事情,但懒得去犯一个好的错误。最好的猜测是它与我名为“column”的专栏有关(尽管它不在黑名单 AFAIK 上)。我正在使用 PostgreSQL。 编辑:尝试将列重命名为“column_name”和“parent_column”,但没有解决问题。会尝试一些其他的事情。
这里是相关的模型代码和模式:
class Price < ApplicationRecord
belongs_to :parent, polymorphic: true
end
class Product < ApplicationRecord
has_many :prices, as: :parent, inverse_of: :parent
end
class CreatePrices < ActiveRecord::Migration[5.2]
def change
create_table :prices do |t|
t.string :parent_type, null: false
t.bigint :parent_id, null: false
t.string :column, null: false
t.decimal :price, null: false, precision: 15, scale: 2
t.timestamp :effective_date, null: false
end
add_index :prices, [:parent_type, :parent_id, :column]
end
end
以及完整的堆栈跟踪:
NoMethodError:
undefined method `scan' for nil:NilClass
# /Users/william/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/inheritance.rb:185:in `compute_type'
# /Users/william/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/reflection.rb:422:in `compute_class'
# /Users/william/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/reflection.rb:379:in `klass'
# /Users/william/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/reflection.rb:234:in `inverse_of'
# /Users/william/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/reflection.rb:239:in `check_validity_of_inverse!'
# /Users/william/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/reflection.rb:474:in `check_validity!'
# /Users/william/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/associations/association.rb:26:in `initialize'
# /Users/william/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/associations.rb:237:in `new'
# /Users/william/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/associations.rb:237:in `association'
# /Users/william/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/activerecord-5.2.2.1/lib/active_record/associations/builder/association.rb:108:in `prices'
最佳答案
答案是我以一种我没有意识到的方式违反了 ActiveRecord 的期望,并且应该包括在原始问题中,但由于傲慢而没有。 我在测试中使用了匿名模型。例如:
module Priced
extend ActiveSupport::Concern
included do
has_many :prices, as: :parent, inverse_of: :parent
end
end
RSpec.describe Priced do
let(:model_class) {
Class.new(ActiveRecord::Base).tap do |klass|
klass.table_name = "products"
klass.send(:include, Priced)
end
end
it "defines a 'has_many :prices' association" do
model = model_class.create!
price = Price.create!(parent: model, price: 100)
expect(model.prices).to eq([price])
end
end
这让我可以将 ActiveRecord 模型与现有表一起使用,但将其与实际 Product
模型中的所有逻辑分离。
我以前从未遇到过此设置的任何问题,因此多年来我一直愉快地使用它来测试模块。所以我认错了;如果我把这段代码放在原来的问题中,我可能会在发布之前就知道答案了,但我回答我自己的问题是为了警告其他“聪明的”Ruby 编码人员。
关于ruby-on-rails - "undefined method ` 扫描 ' for nil:NilClass"以获取与 :inverse_of 的多态 ActiveRecord 关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55423472/
我正在尝试为应用程序扩展 Ruby 的 NilClass,以便任何方法调用都将返回 nil(实际上是 self,新的扩展 nil)。目的是避免大量额外的 nil 检查逻辑,例如, results =
我正在尝试使用Rails应用程序中的devise来授予对Rack中间件中的Sinatra应用程序的访问权限。 我的config/routes.rb有: authenticate "admin" do
我使用 dbf gem 从 df 文件中读取数据。我写了一些代码: # encoding: UTF-8 require 'dbf' widgets = DBF::Table.n
我试图避免由于 NilClass 而导致的 NoMethod 错误。我的代码如下所示: @branded, @nonbranded, @unknown, @affiliate, @social, @r
我使用的是 rails 2.3.5 和 ruby 1.8.7。我正在构建一个简单的 TODO 管理器。我有属于用户的任务,而用户有很多任务。 我使用 acts_as_taggable_on_ste
上下文 - 我们有大量的 Chef 属性来执行我们的安装,现在已经为每个环境定义和更改了大约 3000 多个属性。 问题 - 有时 Chef Recipe 会引用不存在的属性 node[:mystuf
我目前使用的是: 20: Status: 但是,我仍然收到以下错误: ActionView::TemplateError (undefined method `status' for
请找到代码的一部分: button = Login_form.button_with(:name => 'Submit') loggedin_page = Login_form.submit(butt
NoMethodError位于/ nil:NilClass的未定义方法`page_media' indexapp/controllers/homepage_controller.rb before
正如我们所知,(几乎)Ruby 中的一切都是一个对象,它是一个类的实例。 nil 也是一个对象: 2.1.3 :016 > nil.object_id => 8 它是 NilClass 的一个实例:
我在 User#index 中有这段代码查看: 返回用户名: user1 user2 user3 ... 然后我将此代码移至 UserHelper : module UserHelper
我的目标是制作一个投票机,将候选人的选票计入总数。最终我想添加写入候选人的选项,但我遇到了这个错误: undefined method 'push' for nil:NilClass) at line
编辑 |或者另一个关于同一 object 主题的问题。我可以编写自己的类定义来使以下所有内容正常工作吗? o = WeirdObject.new puts "Object o evaluates as
这似乎是一个显而易见的问题,但我是新手。我正在尝试抓取 Rotten Tomatoes top 100 movie一个简单的 CLI 应用程序的列表。一切顺利,直到 hero.link 行我得到了 n
感谢您回答我之前的问题,但我遇到了一个新问题。 我正在创建一个自定义验证器,用于验证用户是否输入了干净的单词。这个在我的 UsersController 上用作验证方法。 我正在使用 Obscenit
我现在被这个错误困住了很长一段时间,已经走到了死胡同。 我得到了这个完全无用的错误 can't dup NilClass 情况是这样的。 我有一个类(class)与另一个类(class)有关系。说
我知道这是一百万次,但尝试了一切,我仍然收到此错误: $ rake db:migrate rake aborted! undefined method `accept' for nil:NilClas
Controller def show @dailies = Daily.where(store_id: params[:store]).order(created_at: :asc).by_mo
有人能帮我解决这个错误吗? NoMethodError in Posts#create Showing C:/Users/User/Documents/website/app/views/posts/
我有一个类似于这里的问题的问题,但删除数据库对我的项目来说不是一个可行的解决方案:Rails 5.2 ActiveStorage undefined method `signed_id' for ni
我是一名优秀的程序员,十分优秀!