2012-03-16 51 views
3

我使用Ruby on Rails創建應用程序,並在管理面板中有blogsposts控制器。爲管理區的路線是這樣的:Rails使用博客和帖子構建方法嵌套資源

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/new上創建一個新帖子時,blog_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 

在它剛剛創建帖子的時刻。我想將該帖子鏈接到網址中的當前博客ID - /blog/2

我怎麼會去這樣做呢?

回答

3

有很多方法可以做到這一點,並取決於您實際使用控制器的方式。如果您只編輯/ blogs/1/xxxx的帖子,則可以這樣做:

blog_id將以params[:blog_id]的形式提供。我通常會創建一個的before_filter找到博客,然後做其他的創建操作:

before_filter do 
    @blog = Blog.find(params[:blog_id]) 
end 

def create 
    @post = @blog.posts.build(params[:post]) 
    if @post.save 
    redirect_to [@blog, @post], notice: 'Post created successfully' 
    else 
    render :action => 'new' 
    end 
end 
+0

輝煌。這工作馬上,謝謝亞當:) – 2012-03-16 19:12:27

2

你想用ActiveRecord關聯本的力量,這樣的事情應該工作:

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 

首先找到的博客文章,這將根據您的路線將是:ID在PARAMS哈希值。接下來使用@blog.posts.new創建與該博客關聯的新帖子。