【问题标题】:Ruby on Rails 4: Polymorphic Association throws InverseOfAssociationNotFoundErrorRuby on Rails 4:多态关联抛出 InverseOfAssociationNotFoundError
【发布时间】:2014-01-08 17:55:54
【问题描述】:

两个表通过多态关联与另一个表»反馈«具有 has_one 关系。

# Class Request
class Request < ActiveRecord::Base
  belongs_to :user, inverse_of: :requests
  has_one :feedback, as: :feedbackable
end

# Class Acceptance
class Acceptance < ActiveRecord::Base
  belongs_to :user, inverse_of: :acceptances
  has_one :feedback, as: :feedbackable
end

# Class Feedback
class Feedback < ActiveRecord::Base
  belongs_to :feedbackable, polymorphic: true
  belongs_to :user, inverse_of: :feedbacks
end

但是,当尝试创建与请求或接受相关的反馈时,控制台会向我抛出错误。以下是我尝试创建反馈的方式:

# First way
feedback = request.create_feedback(user_id: 2, message: "Hey, good driver!")

# Second way
feedback = Feedback.create(user_id: 1, message: "Hey, good driver!") 
#user_id describes the user the feedback addresses

request = Request.create(user_id: 2)
#user_id describes the user the request comes from

request.feedback = feedback

这是抛出的错误:

ActiveRecord::InverseOfAssociationNotFoundError: 找不到 反馈的反向关联(:反馈中的请求)

提前谢谢,我一直在到处搜索,没有发现类似的问题:S

您可能想知道我的数据库是什么样的:

class CreateAcceptances < ActiveRecord::Migration
  def change
    create_table :acceptances do |t|
      t.references :user, index: true

      t.timestamps
    end
  end
end

class CreateRequests < ActiveRecord::Migration
  def change
    create_table :requests do |t|
      t.references :user, index: true

      t.timestamps
    end
  end
end

class CreateFeedbacks < ActiveRecord::Migration
  def change
    create_table :feedbacks do |t|
      t.references :feedbackable, polymorphic: true
      t.references :user, index: true
      t.string :message
      t.timestamps
    end
  end
end

【问题讨论】:

    标签: database activerecord ruby-on-rails-4


    【解决方案1】:

    您发布的代码是否正是正在运行以生成该错误消息的代码?根据错误,我预计会出现以下请求代码:

    # Class Request
    class Request < ActiveRecord::Base
      belongs_to :user, inverse_of: :requests
      has_one :feedback, as: :feedbackable, inverse_of: :request
    end
    

    具体来说,您告诉另一个活动记录在反馈中查找 :request 关联,但它没有找到 has_one :feedback, inverse_of: :request。这可以在任何 activerecord 模型上,不一定是 request.rb。我在 Rails 4.0.2 中遇到了同样的消息并删除了 inverse_of: 解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-30
      相关资源
      最近更新 更多