سؤال

أقوم بتحديث طلب إلى Rails 3 وأواجه مشكلة في إنشاء مفتاح خارجي مخصص. لدي شيء مثل هذا:

class Product < ActiveRecord::Base
  belongs_to :owner, :class_name => 'User'
...
end

class User < ActiveRecord::Base
  has_many :products
...
end

class ProductsController < ApplicationController
  before_filter :authenticate_user!

  def index
    @products = current_user.products
  end
end

المنظر:

<%- @products.each do |p| -%>
    <%= p.created_at %><br />
<%- end -%>

أحصل على هذا الخطأ في سجل القضبان الخاص بي:

Mysql::Error: Unknown column 'products.user_id' in 'where clause': SELECT     `products`.* FROM       `products` WHERE     (`products`.user_id = 1)

يجب أن ترى belongs_to :owner وابحث عن مفتاح خارجي يسمى owner_id. حتى أنني حاولت وضع المفتاح الأجنبي بشكل صريح وهذا لا يعمل. لقد راجعت أيضًا Lighthouse للحصول على خطأ محتمل لـ Rails 3 ولكن لا حظ.

هل كانت مفيدة؟

المحلول

تحتاج إلى تحديد المفتاح الخارجي على has_many :products الارتباط ، لا يعرف تلقائيًا أنه يعكس belongs_to :owner.

هذا يجب أن يعمل:

class User < ActiveRecord::Base
  has_many :products, :foreign_key => 'owner_id'
...
end

من مستندات القضبان:

:مفتاح غريب

حدد المفتاح الأجنبي المستخدم للجمعية. بشكل افتراضي ، يُخمن أن يكون اسم هذه الفئة في الحالات السفلية و "_id". لذا فإن فصل الشخص الذي يجعل جمعية HAS_MANY ستستخدم "person_id" باعتباره الافتراضي: Foreign_key ..

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top