2012-03-02 2 views
5

이 방법은 가능하지 않지만 모듈에 메소드를 삽입 할 수있는 방법이 주어지면 "acts_as_readable : on => : updated_at"을 PublicActivity :: Activity에 삽입하는 방법이 있습니까?gem을 public_activity로 읽지 않은 채로 사용하기

문제는 다음과 같습니다. 아직 읽지 않은 상태에서 사용자가 아직 보지 않은 새로운 활동을 추적하기를 원하므로이 방법을 처음 시도했습니다.

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

class User < ActiveRecord::Base 
    acts_as_reader 
end 

그러나 나는 대신 '활동'

의 readable_type 키 'PublicActivity :: 활동'으로 설정되어 있는지

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

할 때 기록 (DB 테이블 read_marks)에서 발견 읽지 않은 보석이 사용하기 때문입니다

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

base_class가 클래스를 닫습니다. est to ActiveRecord :: Base 가장 좋은 옵션은 무엇입니까?

1) 어떻게 든 주사 'acts_as_readable :에 => : updated_at'직접 활동

2) 포크 PublicActivity :: PublicActivity에 읽지 않은 보석이 설치되어있는 경우 그래서 라인 'acts_as를 추가하는 경우, 확인 ... '

3) 읽지 않은 보석을 포크로 찍어서 ... 내가 여기서 무엇을 할 지 확신하지 못한다면, 수업에 PublicActivity가 시작되는지 확인하는 것이 가장 먼저 추악한 일이 될 것입니다!

그리고 바로 문제를 정의하기 : 기록의 (DB 테이블 read_marks)부터 읽을 유형 내는

Activity.unread_by(current_user).count 

결코 정확한 수를 반환, PublicActivity :: 활동하지 활동입니다.

PublicActivity::Activity.unread... 

를 사용하면 이후 실패 'acts_as_readable :에 => : updated_at'활동하지 PublicActivity :: 활동이다.

UPDATE는

나는 '원숭이 패치'를 Public_Activity 플러그인을 시도했지만 지금은 더 혼란 실패 이유에있어, 내가하고있어 벙어리 뭔가를해야합니다. 다음 파일을 추가했습니다. 그러나 나는

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 

UPDATE

AH을 한 후 readable_type는 PublicActivity :: 활동은 여전히 ​​내 수는 동일하게 유지! 20 자로 제한되어있어서 클래스 이름을 자르는 Readable_type 필드였습니다. 이제는 크기를 늘린 후에 작동합니다.

+0

public_activity 설명에 파일에이 파일을 배치하고 Rails 이니셜 라이저에서 참조하십시오. PublicActivity :: Activity.template = YAML.load_file ("# {RAILS_ROOT} /config/pba.yml") 파일을 배치해야합니다. ? 나는 application.rb, environment.rb에서이 작업을 시도했다. 모든 순열 .. 나는 정의되지 않은 템플릿만을 얻는다! 제발 도와주세요! 감사! – gkolan

+0

한계 값이 20 개인 readable_type 필드를 어떻게 수정 했습니까? 즉, 크기를 어떻게 증가 시켰습니까? –

+0

http://stackoverflow.com/questions/15194261/how-can-i-increase-a-field-in-a-rails-gem/15194299#15194299 got –

답변

2

REKO

당신이 해결책을 발견 확실하지만, 오류 (나는 & 레일 3.2 루비 1.9.3를 사용하고 있습니다) 변화

PublicActivity :: Activity.template = YAML을 제거 할 수 없습니다. load_file ("# {RAILS_ROOT}/config/pba.YML ")

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

나는라는 파일 pba_setup을 만들어 삽입 위의 줄은 이니셜 라이저 폴더에 있습니다. 이제로드 할 때 오류가 해결되었지만 여전히 템플릿 오류가 누락되었습니다. 도움이 되었습니까?

1

아이디어 : public_activity 페이지가 표시 될 때마다 PublicActivities 테이블에 custom activity을 만듭니다. .

다음 번에 사용자가 자신의 페이지를 볼 때 해당 활동의 날짜 ("publicactivity.visit")를 모든 새 활동과 비교하고 읽지 않은 새 활동을 모두 표시합니다.

+0

이 솔루션의 문제점은 누군가 cron 작업을 사용하여 공용 활동 테이블을 정리하여 제거 할 수 있다는 것입니다 –

0

을 사용하여 현재 사용자의 모든 활동을 셀 수 있습니다.
<span class='badge'> 
    <%= PublicActivity::Activity.order("created_at desc").where(owner_id: current_user.follower_ids , owner_type: "User").count %> 
</span> 
관련 문제