2013-07-31 3 views
0

저는 레일스에 초보자이며 포럼을 만들려고합니다. 포럼은 많은 주제를 가지고 있으며, 주제는 포럼에 속하며 많은 마이크로 포스트를 가지고 있으며 마이크로 포스트는 주제와 사용자 모두에 속합니다. 그러나 내가 시도한 것에 관계없이 게시물은 생성되지 않습니다. 내가 게시하려고 현재 때, 나는 라우팅 오류/주제 ""토픽 페이지의 레일스 포럼에 게시물을 생성 할 수 없습니다.

내 routes.rb 파일 "어떤 경로 일치 [얻을]"

resources :users 
resources :sessions, only: [:new, :create, :destroy] 
resources :microposts, only: [:create, :destroy] 
resources :forums, only: [:index, :show] 
resources :topics, only: [:show] 

_micropost_form.html.erb

<%= form_for(@micropost) do |f| %> 
<%= render 'shared/error_messages', object: f.object %> 
<div class="field"> 
    <%= f.hidden_field :topic_id, value: @topic.id %> 
    <%= f.hidden_field :user_id, value: current_user.id %> 
    <%= f.text_field :summary, placeholder: "One-line summary..." %> 
    <%= f.text_area :content, placeholder: "Compose a new post..." %> 
</div> 
<%= f.submit "Post", class: "btn btn-large btn-primary" %> 
<% end %> 
당신이 볼 수 있듯이

microposts_controller.rb

class MicropostsController < ApplicationController 
before_action :signed_in_user, only: [:create, :destroy] 
before_action :correct_user, only: :destroy 

def create 
    #@topic = Topic.find_by_id(params[:topic_id]) 
    @micropost = current_user.microposts.build(micropost_params) 
    if @micropost.save 
     flash[:success] = "Your solution has been posted!" 
     redirect_to topic_path(@topic) 
    else 
     redirect_to topic_path(@topic) 
    end 
end 

def destroy 
    @micropost.destroy 
    redirect_to root_url 
end 

private 

    def micropost_params 
     params.require(:micropost).permit(:summary, :content, :user_id) 
    end 

    def correct_user 
     @micropost = current_user.microposts.find_by(id: params[:id]) 
     redirect_to root_url if @micropost.nil? 
    end 
end 

, 내 생성 함수에서 첫 번째 줄에서 주석 나는 마이크로 포스트의 주제에 대한 아무 관계없이 관계를 기반으로 글을 게시하려했기 때문에. 미리 감사드립니다. 더 많은 코드를 게시하면 도움이 될지 알려주세요!

답변

0

:topics 리소스에서 색인 방법을 정의하지 않았으므로 토픽의 목록이나 색인 페이지로 이동할 수 없습니다. 이 같은 경로를 변경하려고 :

resources :topics, only: [:index, :show] 

또는 자원으로부터 전용 특성을 제거, 자동 기본적으로 모든 방법을 포함한다. 당신이 모델 사이의 관계가있는 경우

resources :topics 

또한, 당신이 당신의 경로에 파일을 중첩 된 경로를 정의해야합니다 예를 들어,이처럼 정의 할 수 있습니다, 당신은 적절하게 변경할 수 있습니다

시도를 변경하려면 이 같은 경로 파일 : 위의 경우

resources :users 
resources :sessions, only: [:new, :create, :destroy] 

resources :forums do 
    resources :topics do 
    resources :microposts, only: [:new, :create, :destroy] 
    end 
end 

, 당신은이처럼 포럼에 액세스 할 수 있습니다

http://localhost:3000/forums 

이 같은 주제에 액세스 할 수 있습니다

http://localhost:3000/forums/id/topics 

는이처럼 microposts에 액세스 할 수 있습니다

http://localhost:3000/forums/id/topics/id/microposts 

당신이 /microposts 직접 당신이 어떤 자원을 외부에 넣어 가지고 액세스하려면.

resources :microposts, only: [:index]  

지금 당신은 그것을 액세스 할 수 있습니다 :

http://localhost:3000/microposts 

그것이 도움이되기를 바랍니다. 감사.

+0

빠른 응답 주셔서 감사합니다. 그러나 여전히 나에게 도움이되지 않습니다. (처음에는 경로 및 주제 컨트롤러에 색인을 추가했지만 결국/topics 페이지로 연결되고 검색 결과를 저장하지 않았습니다. micropost. 저장하지 않았던 것처럼 보였고, 그냥 리다이렉트되었고, 잘못된 페이지로 보냈습니다 ... 또한, 내 라우트 파일을 변경하고 제출을 클릭하면 라우팅 오류가 발생합니다. "경로 일치 [POST]"/ microposts ""- 경로 파일을 변경하는 것 이상을 수행해야합니까? – sw2500

+0

제거 : 마이크로 포스트의 옵션 만 제거하십시오.모든 경로로 리디렉션됩니다. –

+0

효과가 있었습니까? –

관련 문제