سؤال

ولقد حصلت على نموذج العضو يحتوي على العديد من العناصر. A التصويت ينتمي إلى مستخدم وعنصر.

في لDB، أكون قد وضعت ratings.user_id أن لا NULL.

وعندما أنا خلق عنصر، أود أن قيام بذلك:

  def create
    current_user.items.create(params[:item]).ratings.create(params[:rating]
    redirect_to items_path
  end

ولكن، هذا يحجم مع وجود خطأ SQL "USER_ID لا يمكن أن يكون لا شيء"

وذلك أعاد كتابة طريقة إنشاء ك

  def create
    current_user.items.create(params[:item]).ratings.create(params[:rating].merge({:user_id => current_user}))
    redirect_to items_path
  end 

والذي يعمل بشكل جيد.

ولكن، واعتقدت أن تسلسل لإنشاء طرق الكهربائي جهاز الاستقبال المستخدم الحالي قد ملؤها USER_ID التصنيف و. أحد يعرف لماذا لا؟

وTIA.

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

المحلول

وأنا أنصح لك تطبيع هذا إذا أمكن في قاعدة البيانات. ربما تأخذ بها السمة USER_ID من الجدول التقييمات وإذا كنت في حاجة إليها في النموذج الخاص بك الحصول عليه من خلال الانضمام باستخدام: من خلال أسلوب

class Rating
    has_many :items
    has_one :user, :through=>:items

نصائح أخرى

إذا قمت بإنشائه وحفظ عنصر، ثم جعل التصويت من هذا البند، فإنه لن يمر المستخدم على طول إلى التصويت، أليس كذلك؟ وكنت أشير فقط إلى أنها @ rating.item.user، أليس كذلك؟

وعندما نفكر في مثل ذلك، فإنك لن تتوقع البند تم إنشاؤها عن طريق CURRENT_USER لتمرير معلومات المستخدم على طول إلى التصنيف.

تأكد لي أتساءل عما إذا كنت حقا بحاجة العلاقة تصنيفات has_many المستخدم.

ولأن الصنف لديه العديد من التقييمات وأن الجمعية لا تعرف عن هوية المستخدم. وبالنظر إلى أن سلسلة رابطة البند سيكون له هوية المستخدم لأنه ينتمي إلى مستخدم. والتصويت سيكون له رقم السلعة لأنه ينتمي إلى عنصر. ولكن هذا البند إلى التصويت assocation لا يعرف أي شيء عن المستخدم إلا إذا كنت أقول ذلك.

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