为新表单渲染嵌套部分

时间:2012-05-13 20:08:58

标签: ruby-on-rails nested-forms renderpartial

我正在尝试从帖子控制器中的评论控制器渲染_new.html.erb部分。

我的评论资源嵌套在我的帖子资源

的routes.rb

  resources :users, :only => [:show, :create, :new]

  resources :posts do
    resources :comments
    resources :memorybooks
  end

  root to: 'static_pages#home'

  match '/channel',    to: 'static_pages#channel'
  match 'login', to: 'static_pages#login'
  match '/posts', to: 'posts#new'
  match '/users', to: 'users#new'

我的评论控制器中的_new.html.erb部分:

   <%= form_for([@post, @comment]) do |f| %>

      <%= f.label :comment %>
      <%= f.text_field :comment %>

      <p>
      <center>
      <%= f.submit "Submit", class: "btn btn-large btn-primary" %>
      </center>
    <% end %>

我的评论控制器方法:

def create
@post = Post.find_by_id(params[:id])
@comment = @post.comments.build(params[:comment])
    if @comment.save
    redirect_to @current_post
else
    render '/'
end
end

在我的show.html.erb文件中,当我使用以下内容时:

<%= render 'comments/new' %>

出现_new部分表单,但是当我发布时,我收到错误:

No route matches [POST] "/comments"

如果我在show.html.erb中使用以下行

<%= render new_post_comment %>

我收到错误:

undefined local variable or method `new_post_comment'

以下是我的佣金路线

               users POST   /users(.:format)                               users#create
            new_user GET    /users/new(.:format)                           users#new
                user GET    /users/:id(.:format)                           users#show
       post_comments GET    /posts/:post_id/comments(.:format)             comments#index
                     POST   /posts/:post_id/comments(.:format)             comments#create
    new_post_comment GET    /posts/:post_id/comments/new(.:format)         comments#new
   edit_post_comment GET    /posts/:post_id/comments/:id/edit(.:format)    comments#edit
        post_comment GET    /posts/:post_id/comments/:id(.:format)         comments#show
                     PUT    /posts/:post_id/comments/:id(.:format)         comments#update
                     DELETE /posts/:post_id/comments/:id(.:format)         comments#destroy
    post_memorybooks GET    /posts/:post_id/memorybooks(.:format)          memorybooks#index
                     POST   /posts/:post_id/memorybooks(.:format)          memorybooks#create
 new_post_memorybook GET    /posts/:post_id/memorybooks/new(.:format)      memorybooks#new
edit_post_memorybook GET    /posts/:post_id/memorybooks/:id/edit(.:format) memorybooks#edit
     post_memorybook GET    /posts/:post_id/memorybooks/:id(.:format)      memorybooks#show
                     PUT    /posts/:post_id/memorybooks/:id(.:format)      memorybooks#update
                     DELETE /posts/:post_id/memorybooks/:id(.:format)      memorybooks#destroy
               posts GET    /posts(.:format)                               posts#index
                     POST   /posts(.:format)                               posts#create
            new_post GET    /posts/new(.:format)                           posts#new
           edit_post GET    /posts/:id/edit(.:format)                      posts#edit
                post GET    /posts/:id(.:format)                           posts#show
                     PUT    /posts/:id(.:format)                           posts#update
                     DELETE /posts/:id(.:format)                           posts#destroy
                root        /                                              static_pages#home
             channel        /channel(.:format)                             static_pages#channel
               login        /login(.:format)                               static_pages#login
                            /posts(.:format)                               posts#new
                            /users(.:format)                               users#new

任何帮助将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:1)

试试这个

<%= render new_post_comment(@post, @comment) %>

我希望能帮助你。