مشكلة البرنامج المساعد لـ Rails الذي يعمل كقابل للقراءة
-
09-06-2019 - |
سؤال
أنا أستخدم Intridea بمثابة مقروءة ملحق Rails لنظام المراسلة الذي أقوم بإنشائه حاليًا.لقد حددت فئة رسالتي وفقًا لذلك:
class Post < ActiveRecord::Base
acts-as-readable
end
ويبدو أن كل شيء يعمل وفقًا للخطة، ولكن عند محاولة جعل التطبيق يعرض الرسائل غير المقروءة في عرض الرسائل، أواجه مشكلات.
مثالهم:(لقد قمت بتغيير الشرطة السفلية إلى واصلات بسبب مشاكل التنسيق)
bob = User.find_by_name("bob")
bob.readings # => []
Post.find_unread_by(bob) # => [<Post 1>,<Post 2>,<Post 3>...]
Post.find_read_by(bob) # => []
Post.find(1).read_by?(bob) # => false
Post.find(1).read_by!(bob) # => <Reading 1>
Post.find(1).read_by?(bob) # => true
Post.find(1).users_who_read # => [<User bob>]
Post.find_unread_by(bob) # => [<Post 2>,<Post 3>...]
Post.find_read_by(bob) # => [<Post 1>]
bob.readings # => [<Reading 1>]
لذا يبدو أنني إذا أردت سرد عدد الرسائل غير المقروءة الموجودة في صندوق بريد (على سبيل المثال Inbox (39) )، فيجب أن أكون قادرًا على القيام بشيء مثل:
<%= Post.find_unread_by(current-user).count %>
ولكن دون جدوى.يبدو أنني دائمًا أتعثر في مشكلات العرض البسيطة بعد ضبط كل شيء.أيه أفكار؟
المحلول
سوف يعمل ما يلي
<%= Post.find_unread_by(current_user).size %>
أو
<%= Post.find_unread_by(current_user).length %>
ومع ذلك، إذا قمت بفحص سجل التطوير الخاص بك، فيجب أن ترى أنه يحصل على عدد الرسائل غير المقروءة
- استرجاع كافة المشاركات
- - استرجاع كافة المشاركات التي قرأها المستخدم
- إزالة الكل 2.من 1.في روبي
سيكون هذا أداءً سيئًا للغاية مع وجود الكثير من المشاركات.
الطريقة الأفضل هي استرداد المشاركات التي قرأها المستخدم الحالي ثم استخدام ActiveRecord::Calculations للحصول على عدد دون استرداد جميع المشاركات في قاعدة البيانات
Post.count(:conditions => [ "id NOT IN (?)", Post.find_read_by(current_user)])
يجب أن ينتقل هذا إلى نموذج النشر الخاص بك لاتباع أفضل الممارسات لعدم وجود مكتشفات في العرض أو وحدة التحكم
Post.rb
def self.unread_post_count_for_user(user)
count(:conditions => [ "id NOT IN (?)", Post.find_read_by(user)])
end
ثم سيكون وجهة نظرك فقط
<%= Post.unread_post_count_for_user(current-user) %>