2013-10-09 39 views
1

我想填充我的活動模型的parameters屬性(來自public_activity gem),但沒有成功。使用模型實例屬性填充public_activity參數

class Project < ActiveRecord::Base 
    include PublicActivity::Model 

    tracked owner: ->(controller, model) { controller && controller.current_user }, 
      parameters: ->(controller, model){ 
      {foo: 'bar'} 
      } 
end 

第一個問題是,當我更新項目時,參數散列總是空的。第二個問題是,->(controller, model)收到控制器和模型類,但不是實例。我的目標是將更新集中的兩個字段更新爲參數(一個id和一個字符串)。

我該如何做到這一點?

回答

1

解決了它,雖然沒有通過模型。看起來,在更復雜的情況下,你不會以這種方式創建它。您可以通過回調模式(可能比較複雜,因爲缺少current_user,除非您進行一些hackery)或在控制器中創建模型。

的方式我做到了:

型號

class Project < ActiveRecord::Base 
    include PublicActivity::Common 

    attr_accessor :previous_status_id 

    before_save :remember_previous_status_id 


    private 

    def remember_prefious_status_id 
    self.previous_status_id = self.changes['status_id'].first if self.changes.include? 'status_id' 
    end 
end 

控制器

# [...] 
if @project.update_attributes project_params 
    @project.create_activity :update, 
    owner: current_user, 
    previous_status_id: @project.previous_status_id, 
    parameters: { 
     # ... 
    } 

    # ... 

遷移

create_table :activities do |t| 
    # ... 
    t.belongs_to :previous_status 
    # ... 

初始化程序

PublicActivity::Activity.class_eval do 
    belongs_to :previous_status, class_name: 'Status' 
end 
8

有點晚了答案,但仍可能會有所幫助別人,誰一個嘗試使用默認參數散列PublicActivity。按照官方的文檔:

class Article < ActiveRecord::Base 
     include PublicActivity::Model 
     tracked :params => { 
      :title => :title, 
      :author_name => "Michael", 
      :category_name => proc {|controller, model_instance| model_instance.category.name}, 
      :summary => proc {|controller, model_instance| truncate(model.text, :length => 30)} 
     } 
    end 

你可以參考: http://rubydoc.info/gems/public_activity/PublicActivity/Tracked/ClassMethods 更多細節

相關問題