2
version : Rails 3.2.22.2 

ich die Impressionisten Juwel mit Benutzeraktivität verfolgen: https://github.com/charlotte-ruby/impressionistRails 3: Wie ein Verfahren zum Gem Modell hinzugefügt werden, ohne die Gem Quelle Ändern

Das gibt mir ActiveModel::MassAssignmentSecurity::Error. Ich möchte das Impression Modul aus dem Edelstein übersteuern, um attr_accessible zu verwenden.

Ich habe versucht, 2 Dinge:

1: Erstellen Sie eine impression.rb Datei unter app/models

class Impression 
    def hello 
    "hello world" 
    end 
end 

In initializer/impression.rb,

require 'impression' 

wenn ich folgendes auf Konsole versuchen:

a = Impression.first 
a.hello 

Ich bekomme Methode nicht gefunden Fehler.

2: Ich habe den Code in der initializezs/impression.rb Datei hinzugefügt:

Impression.class_eval do 
    def hi 
     puts 'you got me!' 
    end 
end 

und ich habe immer noch die gleichen Fehler wie in Punkt 1.

Wie kann ich das Modell aus dem Edelsteine ​​effektiv außer Kraft setzen?

Antwort

2

Ich habe die folgende Änderung vorgenommen, um meinen Code arbeiten zu lassen. Unter initializers erstelle ich eine Datei ->initializer/my_monkey_patch.rb mit Code folgenden

class Impression < ActiveRecord::Base 
     attr_accessible :impressionable_type, :impressionable_id, :controller_name, :action_name, :user_id, :request_hash, :session_hash, :ip_address, :referrer 

     def hello 
      "hello WORLD!" 
     end 
end 

Danke @Mohammad Shahadat Hossain für Ihre Hilfe

+0

Es ist mir eine Freude, dass Sie die Lösung gefunden haben. Es ist großartig. –

1

Ich würde lieber mit 2 Methode gehen. Aber du hast gesehen, ob du schon in einer Klasse bist. Dann zum Überschreiben müssen Sie in Ihrem model/impression_decorator.rb verwenden.

Impression.class_eval do 
    attr_accessor :something 

    def hi 
    puts 'you got me! #{someting}' 
    end 
end 
+0

Die ursprüngliche Modell/impression.rb Klasse in der Gem gar keine Methoden hat. Ich möchte zu diesem Modell attr_accessible hinzufügen: some_existing_field und eine Methode. – KavitaC

+0

Dann können Sie etwas wie oben tun. 'Impression.class_eval' ist alles, was Sie verwenden müssen. Verwenden Sie eine beliebige Methode und attr_accessor wie möglich. –

+0

Ich habe die Datei "model/impression_decorator.rb" erstellt und den von Ihnen erwähnten Code hinzugefügt. Nichts im Initialisierer. Wenn ich die App neu starte, kann ich immer noch nicht auf die 'hi' Methode zugreifen – KavitaC