2012-03-16 2 views
3

Ruby on Rails를 사용하는 앱을 만들고 관리자 패널에는 blogsposts 컨트롤러가 있습니다. 관리자 영역에 대한 경로는 다음과 같습니다레일즈가 블로그와 게시물로 중첩 된 메소드를 빌드합니다.

constraints :subdomain => "admin" do 
    scope :module => "admin" do 
    root to: "pages#index" 
    resources :blogs do 
     resources :posts, :controller => "posts" 
    end 
    end 
end 

내가 http://admin.mydomain.com/blogs/blogs/2/가 블로그에 게시물을 보여주는 블로그를 보여주고있는 무엇.

내가 원하는 것은 /blogs/2/posts/newblog_id이 게시물에 첨부 된 새 게시물을 만들 때입니다. admin/posts_controller.rb에서

난 그냥 게시물을 작성하는 순간에 생성 작업을

def create 
    @post = Post.new(params[:post]) 

    if @post.save 
    redirect_to posts_path, notice: 'Post was successfully created.' 
    else 
    render action: "new" 
    end 
end 

로이 있습니다. 해당 게시물을 URL에있는 현재 블로그 ID - /blog/2에 연결하고 싶습니다.

어떻게해야합니까?

답변

3

이렇게하는 방법에는 여러 가지가 있으며 실제로 컨트롤러를 사용하는 방법에 따라 다릅니다./blogs/1/xxxx에서 게시물을 편집하는 경우 다음을 수행 할 수 있습니다.

blog_id는 params[:blog_id]으로 사용할 수 있습니다. 나는 보통 before_filter를 만들어 블로그를 찾은 다음 나머지 액션을 생성합니다.

+0

Brilliant. 그건 곧바로, 감사합니다 아담 :) –

2

당신은이에 대한 액티브 협회의 힘을 사용하려면,이 같은 작업을해야합니다 : params 객체를 파라미터 ID :

def create 
    @blog = Blog.find_by_id(params[:id]) 

    if @blog 
    @post = @blog.posts.new(params[:post]) 
    if @post.save 
     redirect_to posts_path, notice: 'Post was successfully created.' 
    end 
    end 

    render :new 
end 

먼저 블로그, 경로에 따라 될 것입니다 것입니다 게시물을 찾을 해시시. 다음으로 @blog.posts.new을 사용하여 해당 블로그와 연결된 새 게시물을 만드십시오.

관련 문제