2014-09-19 7 views
0

inherited_resources을 사용하는 comments_controller이 있으며이 모델을 다루고 있습니다 : 및 Shop (belongs_to User). 레일 4.1.1 및 Inherited_resources v는 1.5.0입니다.루비 온 레일즈 상속 된 소스 다수 belongs_to

경로는 다음과 같습니다

resources :shop do 
    resources :comments, only: [:create, :destroy] 
end 

그러나, 아래의 코드가 작동하지 않습니다

class CommentsController < InheritedResources::Base 
    before_filter :authenticate_user! 
    nested_belongs_to :user, :shop 
    actions :create, :destroy 

    def create 
    @comment = build_resource 
    @comment.shop = Shop.find(params[:hotel_id]) 
    @comment.user = current_user 

    create! 
    end 

    def destroy 
    @hotel = Shop.find(params[:hotel_id]) 
    @comment = Comment.find(params[:id]) 
    @comment.user = current_user 

    destroy! 
    end 

private 

    def permitted_params 
    params.permit(:comment => [:content]) 
    end 

RSpec에 의견의 테스트 생성/삭제 나 Couldn't find User without an ID을 말한다.

도움 주셔서 감사합니다. 실패한 테스트의

UPD 하나 : 당신이 Shop에 속하는 Comments 처리 할 같은

let(:user) { FactoryGirl.create(:user) } 
    let(:shop) { FactoryGirl.create(:shop, user: user) } 

    describe "comment creation" do 
    before { visit shop_path(shop) } 

    describe "with invalid information" do 
     it "should not create a comment" do  
     expect { click_button "Post a comment" }.not_to change(Comment, :count) 
     end 
    end 
+0

당신이에있는 레일의 버전을 언급하는 것이 도움이 될 것입니다. 이 보석 [상속 된 자원] (https://github.com/josevalim/inherited_resources)은 꽤 오래되었고 저자는 Rails 3 이상에서는 사용하지 말 것을 권고합니다. – San

+0

@San을 업데이트했습니다. Rails는 4.1.1 –

답변

1

당신의 경로에서, 그것은 보인다. 이 경우 nested_belongs_to이 필요하지 않으며 컨트롤러에서 belongs_to :shop으로 변경하면됩니다. 그리고 다른 라인 belongs_to :user을 별도로 추가하십시오.

그래서, 컨트롤러는 다음과 같이 표시됩니다

class CommentsController < InheritedResources::Base 
    before_filter :authenticate_user! 
    belongs_to :shop 
    belongs_to :user 
    actions :create, :destroy 

    . 
    . 
    . 
end 
+0

감사합니다. 시도해 보았고 실수가 바뀌 었습니다! 이제는 # 에 대한'정의되지 않은 메소드''사용자 '입니다 .. –

+0

어디서 오류가 발생합니까? 실행중인 테스트와 전체 출력을 게시하십시오. 감사. – San

+0

테스트를 추가했습니다. –