لماذا لا هذا يرتبط خلق عمل الدعوة؟
-
21-08-2019 - |
سؤال
ولقد حصلت على نموذج العضو يحتوي على العديد من العناصر. 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 لا يعرف أي شيء عن المستخدم إلا إذا كنت أقول ذلك.