2016-07-28 9 views
1

本当に、それはちょうど1日の読み込みを終了します。私はずっとRails 5.0.0.beta3にいました。ログはアセットから何もロードしようとしません。ドキュメントの指示どおりにすべてを設定してください。 Gemfileは:モジュールをアプリケーションコントローラに追加すると、bootstrap-sassがRailsで機能しなくなるのですか?

gem 'sass-rails', '~> 5.0' 
gem 'bootstrap-sass', '~> 3.3.6' 

application.scss:

@import "bootstrap-sprockets"; 
@import "bootstrap"; 

application.js

//= require jquery 
//= require jquery-ui 
//= require bootstrap-sprockets 
//= require jquery_ujs 
//= require turbolinks 
//= require_tree . 

はまた、config.ruにrequire 'bootstrap-sass'を追加しようとしました。それは助けになりませんでした。

UPDATE:

class ApplicationController < ActionController::Base 
    # Prevent CSRF attacks by raising an exception. 
    # For APIs, you may want to use :null_session instead. 
    protect_from_forgery with: :exception 
    include SomeModule 
end 

任意のアイデア:

がそう、それはブートストラップのように見えますが、私はそうのように、自分のアプリケーションのコントローラにモジュールを追加しようとするたびに死にますか?ここ

は、モジュールです:

module BeforeOrAfter 
    attr_accessor :past 
    attr_accessor :future 

    require "date" 
    def initialize 
    @future = [] 
    @past = [] 
    end 

    def before_or_after(event) 
    if event < DateTime.now 
     @past << event.id 
    else 
     @future << event.id 
    end 
    end 
end 
+0

すべてのモジュールで発生しますか?空のモジュールはどうですか? – Owen

+0

hmm、空のモジュールでうまく動作します – sivanes

+0

あなたが含むモジュールの詳細を教えてください。ブートストラップ・サスと矛盾する関数を定義しているのでしょうか? – Owen

答えて

1

あなたが取得しているエラーは、次のようにsuperを呼び出すことなく、ApplicationControllerに上initializeをオーバーライドによるものです:

require "date" 
module BeforeOrAfter 
    attr_accessor :past 
    attr_accessor :future 

    def initialize(*args) 
    @future = [] 
    @past = [] 
    super 
    end 

    def before_or_after(event) 
    if event < DateTime.now 
     @past << event.id 
    else 
     @future << event.id 
    end 
    end 
end 

一方、あなたを明確にした後、これは完全に不要なようです。イベントを表すオブジェクトのEnumerable(配列など)があり、過去のイベントと将来のイベントに分割したいだけです。 Enumerable#partitionメソッドは、この目的には理想的です。ブロックをとり、入力を2つの配列に分割します.1つは条件に一致するすべての項目と、そうでない項目はすべて配列で分割します。だから、私の推薦は次のとおりです。

  • あなたは
  • はあなたがイベントを分割する必要がコントローラにパーティションのコードを追加します含めるしようとしていたモジュールを削除します。

あなたの配列がeventsと呼ばれ、timeフィールドでのActiveRecordのようなオブジェクトが含まれていると仮定:

(@past, @future) = events.partition { |event| event.time < Time.current } 

そして、それはそれです!現在、@past@futureが表示されます。イベントは本当にActiveRecordのモデルであれば、あなたはさらに一歩それを取るとEventクラスにこれを追加することができます。

def past? 
    self.time < Time.current 
end 

そして、次のようにコントローラーを変更します。

(@past, @future) = events.partition(&:past?) 
# equivalent to the following: 
# (@past, @future) = events.partition { |event| event.past? } 

をあなたがこれを行う必要がある場合ある範囲のコントローラに渡って、個別のモジュールを必要としない機能をカプセル化したい場合は、各コントローラが呼び出すApplicationController内の関数を定義するだけです。あなたは、常に同じインスタンス変数を移入した場合

# application_controller.rb 
def prepare_events(events) 
    (@past, @future) = events.partition { |event| event.time < Time.current } 
    events 
end 

# widgets_controller.rb 
def index 
    @widgets = Widget.all 
    prepare_events(@widgets) 
end 

かかわらず、あなたのコレクションの内容のあなたも、それアプリケーションコントローラでafter_filter作ることができます。

after_filter :prepare_events 
def prepare_events 
    (@past, @future) = @resources.partition { |event| event.time < Time.current } 
    true 
end 

複数回にあなたをイベントを追加することを可能にするために希望配列に参加する必要があります。最も簡単な方法は、それらを追加して再び分割することです。

# application_controller.rb 
def prepare_events(events) 
    events = events + @past + @future if @past 
    (@past, @future) = events.uniq.partition { |event| event.time < Time.current } 
    true 
end 
+0

を更新しました。私は過去数日間この記事を読んできました。マルチスレッド、リクエストごとの配列のようなものはすべて私にとって非常に新しいものです。この配列の目的は、複数のコントローラでイベントの日時を過去および将来のカテゴリに整理してビューに渡すことで、2つのカテゴリを個別に表示できるようにすることです。 – sivanes

+0

リクエストごとに使用されている場合は、次のようにするのがよいでしょう。 '(@past、@future)= events.partition {| e | e Owen

+0

リクエストごとのシナリオであるかどうかの例を教えていただけますか?私が想像しているように、レールが視点を生成すると、それは過去の出来事と将来の出来事の要求を果たそうとします。そのプロセスでは、それらの2つの配列をキャッシュに構築します。それはそれを要求ごとにするでしょうか? – sivanes

関連する問題