2013-10-21 4 views
2

page!의 튜토리얼을 사용하여 포럼 페이지를 구현하려고합니다! 여기 포럼은 모델입니다.rails - 포럼에 대한 정의되지 않은 메소드 : 모듈

class ForumsController < ApplicationController 
    before_filter :admin_required, :except => [:index, :show] 

    def index 
    @forums = Forum.all 
    end 

    def show 
    @forum = Forum.find(params[:id]) 
    end 

    def new 
    @forum = Forum.new 
    end 

    def create 
    @forum = Forum.new(params[:forum]) 
    if @forum.save 
     redirect_to @forum, :notice => "Successfully created forum." 
    else 
     render :action => 'new' 
    end 
    end 

    def edit 
    @forum = Forum.find(params[:id]) 
    end 

    def update 
    @forum = Forum.find(params[:id]) 
    if @forum.update_attributes(params[:forum]) 
     redirect_to @forum, :notice => "Successfully updated forum." 
    else 
     render :action => 'edit' 
    end 
    end 

    def destroy 
    @forum = Forum.find(params[:id]) 
    @forum.destroy 
    redirect_to forums_url, :notice => "Successfully destroyed forum." 
    end 
end 

오류는 다음과 같습니다 :이 오류를 해결할 수있는 방법

class Forum < ActiveRecord::Base 
    attr_accessible :name, :description 
    has_many :topics, :dependent => :destroy 

    #method to find the most recent forum topics 
    def most_recent_post 
    topic = Topic.first(:order => 'last_post_at DESC', :conditions => ['forum_id = ?', self.id]) 
    return topic 
end 
end 

: 여기

undefined method `all' for Forum:Module 

(일부 모델/forum.rb) 포럼의 모델이 컨트롤러 코드 ? 나는 ROR에 익숙하지 않고이 오류에 대한 적절한 해결책을 찾을 수 없다.

+1

제발, 귀하의 포럼 모델 소스 코드를 제공하십시오 –

+1

다시 실행 4 단계. 포럼은 모듈이 아니라 응용 프로그램/모델의 모델 – TheIrishGuy

+0

에 있습니다. @ThelrishGuy 질문에 실수 한 것에 대해 유감스럽게 생각합니다. – trialError

답변

1

이것은 경로와 관련이 있습니다.

시도

root :to => 'forums#index'

대신

map.root :controller => 'forums'

config/routes.rb에 그것은 레일 2/3 일이 있고 난이 튜토리얼은 2

로 작성된 것입니다 생각 당신이 만약 Rails를 배우려고하는데, 나는 Michael Hartl's Rails Tutorial을 추천한다.

+1

이봐, 내가 일찍 그 변화를 만들었지 만 여전히 같은 오류가 발생했다. – trialError

+0

그래, 시몬느가 그것을 못살게 굴 것 같아. 포럼 모듈이 이미 정의 된 것 같습니다. –

5

위의 오류는 ModuleForum에 대해 정의 된 메서드가 없다는 것을 나타냅니다. 그러나 Forum의 정의는 이것이 모듈이 아니라 클래스임을 분명히 보여줍니다.

유일한 설명은 응용 프로그램의 다른 곳에서 포럼의 다른 정의가있는 것입니다. 여기에서 Module으로 정의하면 모델 앞에로드되어 응용 프로그램과 충돌합니다.

응용 프로그램을 Forum으로 호출하지 않도록주의하십시오. 그렇지 않으면 주 응용 프로그램 네임 스페이스가 모델과 충돌합니다 (문제가 발생할 가능성이 큽니다). 이 경우 응용 프로그램의 이름을 바꾸거나 모델을 (더 쉽게) 이름을 바꿉니다. 실제로 응용 프로그램 네임 스페이스는 모듈로 정의됩니다.

응용 프로그램의 소스 코드에서 포럼 모듈 정의를 검색하고 제거하십시오. 또한 보석에있을 수도 있지만 불가능하지는 않습니다. 따라서 사용중인 종속성의 소스 코드를 알고 있어야합니다.

관련 문제