2016-03-21 14 views
2

angewendet Ich habe Datei, die nach dem Update Instanz aktualisiert werden soll Attribute Es sieht wie folgt aus:Aktualisierte Version von Datei nicht

controller.rb

def update 
    if UpdateNewspaperDesign.new(newspaper_design, newspaper_design_params).call 
    #render response 
    end 
end 

und

class UpdateNewspaperDesign 
    def initialize(newspaper_design, params) 
    @newspaper_design = newspaper_design 
    @params = params 
    end 
    def call 
    newspaper_design.assign_attributes(params) 
    File.open(File.join(Rails.root, 'tmp', "newspaper-design-#{Time.now.to_i}.css"), 'w') do |file| 
     file.write(css(newspaper_design)) 
     newspaper_design.css = file 
    end 
    newspaper_design.save 
    end 
    private 
    attr_reader :newspaper_design, :params 
    def css(newspaper_design) 
    NewspaperDesignCssCompiler.new(newspaper_design).call 
    end 
end 

Und dann schließe ich CSS im Layout

= stylesheet_link_tag newspaper.design.css_url, media: 'all' 

Wie ich in der Konsole sehe: css URL ist aktualisiert, aber die URL, die im Layout eingefügt wird - ist kein Update.

+0

Deklarieren 'attr_reader: newspaper_design,: params' in privaten seltsam ist, wenn nicht ein Anti-Muster seit Instanz Attribute in Ruby sind privat. – max

+0

Es ist auch ziemlich unklar, was Sie zu tun versuchen - wenn Sie versuchen, den Benutzer CSS-Sites aktualisieren zu lassen, sollten Sie beachten, dass die Rails-Asset-Pipeline Assets zur Bereitstellungszeit kompilieren soll - nicht pro Anfrage, wie dies wirklich wäre langsam. Wenn Sie möchten, dass der Benutzer die 'application.css' oder eine der Dateien, die mit den Asset-Helfern verknüpft sind, ändern kann, müssten Sie eine Neukompilierung auslösen. Es ist jedoch keine sehr gute Idee, da Sie die richtige Versionskontrolle verlieren. Vertrauen Sie mir, ich habe große Websites, wo die Editoren kopieren alle Arten von Mist-CSS aus dem Interweb ... – max

+0

@max Benutzer aktualisiert Design-Attribute zum Beispiel - Farbe, als ich css manuell kompilieren, fügen Sie diese CSS zu Datei und laden es. Dann ist diese CSS in der Layoutdatei enthalten – skrypalyk

Antwort

0

ersetzen Datei mit Tempfile - das ist, wie ich es feste

Verwandte Themen