2016-07-28 2 views
1

정말, 언젠가는로드가 중단됩니다. 나는 레일즈 5.0.0.beta3을 계속 사용 해왔다. 로그에는 assets /에서 아무 것도로드하려고 시도하지 않습니다. 문서가 지시하는대로 모든 것이 설정되었습니다. Gemfile :응용 프로그램 컨트롤러에 모듈을 추가 할 때 bootstrap-sass가 Rails에서 종료됩니까?

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

application.scss :

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

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

또한, config.ru하는 require 'bootstrap-sass'을 추가하는 시도 application.js. 도움이되지 않았다.

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

흠, 빈 모듈로 잘 작동합니다. – sivanes

+0

포함하고있는 모듈의 세부 정보를 공유하십시오. 아마도 bootstrap-sass와 충돌하는 함수를 정의했을 것입니까? – 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#partition 메서드는 이러한 목적에 이상적입니다. 블록을 사용하여 입력을 두 조건으로 일치하는 항목과 조건과 일치하는 모든 항목으로 나눕니다. 그래서, 내 추천 :

  • 당신이
  • 당신이 이벤트를 분할해야 컨트롤러에 파티션 코드를 추가하여 포함하도록 시도했던 모듈을 삭제합니다.

은 배열 events라고하고 time 필드 액티브와 같은 개체를 포함되었다고 가정 :

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

을 그리고 바로 그거야! 보기에서 @past@future을 사용할 수 있습니다. 이벤트가 정말 액티브 모델은 경우에 당신은 한 단계 더 걸릴하고 Event 클래스에이를 추가 할 수

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

을이 작업을 수행해야하는 경우 다음과 같이

def past? 
    self.time < Time.current 
end 

그리고이 컨트롤러를 변경 여러 컨트롤러에 걸쳐 있고 별도의 모듈이 필요없는 기능을 캡슐화하려면 각 컨트롤러에서 호출 할 ApplicationController의 함수를 정의하면됩니다.

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) 
    (@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을 만들 수 있습니다 배열에 가입해야합니다. 가장 간단한 방법은 추가하고 다시 분할하는 것입니다.

# 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

지난 며칠 동안이 게시물을 검토했습니다. 멀티 스레딩, 요청 당 배열과 같은 모든 것들은 나에게 매우 새롭다. 이 배열의 목적은 여러 컨트롤러에서 이벤트의 datetimes를 과거 및 미래 범주로 구성하여보기로 전달하여 두 범주를 따로 표시 할 수있게하는 것입니다. – sivanes

+0

요청에 따라 사용된다면 다음과 같이하는 것이 좋습니다.'(@past, @future) = events.partition {| e | 전자 Owen

+0

요청 당 요청 시나리오가 아닌 경우를 예로들 수 있습니까? 상상할 수있는 것처럼, 레일이 전망을 생성 할 때 과거의 사건과 미래의 사건에 대한 요청을 이행하려고 시도합니다. 이 과정에서 캐시에 두 개의 배열을 작성합니다. 그것을 요청 당하나요? – sivanes