2012-03-02 24 views
5

Tôi không chắc chắn điều này là có thể, nhưng với cách bạn có thể tiêm một phương thức vào các mô-đun, có cách nào để tiêm "actions_as_readable: on =>: updated_at" vào PublicActivity :: Activity?sử dụng gem chưa đọc với public_activity

Vấn đề là: Tôi muốn chưa đọc cũng theo dõi các hoạt động mới mà người dùng chưa thấy, vì vậy trước tiên tôi đã thử nó theo cách này.

class Activity < PublicActivity::Activity 
    acts_as_readable :on => :updated_at 
end 

class User < ActiveRecord::Base 
    acts_as_reader 
end 

Tuy nhiên tôi nhận thấy trong hồ sơ (read_marks bảng DB) khi tôi làm

Activity.mark_as_read! :all, :for => current_user 

rằng chìa khóa readable_type được thiết lập để 'PublicActivity :: Hoạt động' thay vì 'Hoạt động'

Điều này là do đá quý chưa đọc sử dụng

user.read_marks.build(:readable_id => obj.id, :readable_type => self.base_class.name) 

rằng lớp cơ sở đó sẽ đóng lớp est đến ActiveRecord :: Base Điều gì sẽ là lựa chọn tốt nhất?

1) tiêm bằng cách nào đó 'acts_as_readable: trên =>: updated_at' trực tiếp vào PublicActivity :: Hoạt động

2) ngã ba PublicActivity và kiểm tra xem viên ngọc chưa đọc được cài đặt, nếu có thêm dòng 'acts_as ... '

3) ngã ba đá quý chưa đọc và ... không chắc chắn những gì tôi sẽ làm ở đây, điều xấu xí đầu tiên đến với tâm trí sẽ là để kiểm tra xem một lớp học bắt đầu với PublicActivity!

Và chỉ để xác định vấn đề: Từ (read_marks bảng DB) của kỷ lục có thể đọc được loại là PublicActivity :: Hoạt động và không Hoạt động, tôi

Activity.unread_by(current_user).count 

không bao giờ trả về đếm chính xác. Sử dụng

PublicActivity::Activity.unread... 

sẽ bị lỗi vì 'actions_as_readable: on =>: updated_at' đang hoạt động chứ không phải PublicActivity :: Activity.

CẬP NHẬT

Tôi đã cố gắng để 'khỉ vá' plugin Public_Activity nhưng bây giờ tôi thậm chí còn bối rối hơn là tại sao nó không thành công, nó phải là một cái gì đó ngớ ngẩn tôi đang làm. Tôi đã thêm tệp sau. Tuy nhiên, readable_type vẫn là PublicActivity :: Hoạt động và số lượng của tôi vẫn giữ nguyên sau khi tôi làm

PublicActivity::Activity.mark_as_read! :all, :for => current_user 


# config/initializers/activity_unread.rb 
PublicActivity::Activity.module_eval do 

    acts_as_readable :on => :updated_at 

end 

CẬP NHẬT

AH! Đó là trường readable_type có giới hạn chỉ 20 mà đã cắt ngắn tên lớp của tôi. Bây giờ nó hoạt động sau khi tôi tăng kích thước.

+0

mô tả public_activity nói Nơi này trong một tập tin và tham khảo nó trong một tập tin Rails initializer.WHich bạn nên đặt PublicActivity :: Activity.template = YAML.load_file ("# {} RAILS_ROOT /config/pba.yml") ? Tôi đã cố gắng để làm điều này trong application.rb, environment.rb .. tất cả hoán vị .. Tôi chỉ nhận được mẫu không được định nghĩa! Làm ơn giúp tôi! cảm ơn! – gkolan

+0

Làm thế nào bạn sửa chữa trường readable_type có giới hạn chỉ 20? Đó là, làm thế nào bạn tăng kích thước của nó? –

+0

http://stackoverflow.com/questions/15194261/how-can-i-increase-a-field-in-a-rails-gem/15194299#15194299 đã nhận nó –

Trả lời

2

reko

Không chắc chắn nếu bạn tìm thấy giải pháp, nhưng để thoát khỏi lỗi (Tôi đang sử dụng của Ruby 1.9.3 & Rails 3.2) thay đổi

PublicActivity :: Activity.template = YAML. load_file ("# {RAILS_ROOT}/config/pba.yml ")

để

PublicActivity :: Activity.template = YAML.load_file (" # {} Rails.root /config/pba.yml ")

Tôi tạo ra một tập tin gọi pba_setup và chèn dòng trên trong thư mục khởi tạo. Bây giờ xóa lỗi khi tải, nhưng tôi vẫn gặp lỗi mẫu bị thiếu? Hy vọng điều này sẽ giúp!

1

Ý tưởng là: bất cứ khi nào người dùng xem trang public_activity của mình, hãy tạo custom activity trong bảng PublicActivities .

Lần tiếp theo, khi người dùng xem trang của anh ấy, sau đó so sánh ngày đó với hoạt động mới và hiển thị tất cả hoạt động mới chưa đọc

+0

Vấn đề với giải pháp này là ai đó có thể đang sử dụng các nhiệm vụ cron để dọn dẹp bảng hoạt động công cộng để xóa –

0

Bạn có thể đếm tất cả hoạt động thuộc về người dùng hiện tại sử dụng

này
<span class='badge'> 
    <%= PublicActivity::Activity.order("created_at desc").where(owner_id: current_user.follower_ids , owner_type: "User").count %> 
</span> 
Các vấn đề liên quan