Rails和渲染嵌套资源

时间:2012-12-13 14:22:27

标签: ruby-on-rails ruby-on-rails-3

例如:我可以渲染'/ tags /:id / posts'吗?

如果我尝试渲染tag_posts_path(@tag)或其他一些方法,我会收到此错误或类似错误:

Missing partial /tags/1/posts...

在我的routes.rb中我有这个:

resources :tags do
  resources :posts
end

2 个答案:

答案 0 :(得分:1)

我已经和你一样的东西搞了一下

我实现了渲染正确的页面

  def create
    @project = Project.find(params[:project_id])
    @comment = @project.comments.build(comment_params)
    if @comment.save
      flash[:success] = "Chingon!"
      redirect_to @project
    else
      render 'projects/show'
    end
  end

我的路线如下:

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

Rails希望你渲染的不是路径而是某些页面(例如' new'或' show') 我只在我的ELSE遇到麻烦,我正在渲染' projects / show'。它似乎不是很正确的模板,因为它在原始渲染,没有任何CSS,但我希望出现错误。这是我现在能够为空注释呈现错误消息的唯一方法。

我只是通过绕过默认方式显示错误并将其放在简单的flash中来解决这个问题:

def create
    @project = Project.find(params[:project_id])
    @comment = @project.comments.build(comment_params)
    if @comment.save
        flash[:success] = "New comment here, bro"
        redirect_to @project
    else
        redirect_to @project
        flash[:error] = flash_error_message(@comment)
    end
end


def flash_error_message(arg)
    "The form contains #{arg.errors.count} error: #{arg.errors.full_messages.join(', ')}"       
end

答案 1 :(得分:0)

如果我是对的,我认为你要找的是这样的

resources :tags do
  resources :posts
end

您可以通过输入rake routes

来查看这会产生哪种网址或路由

我不太确定,但重新阅读你的问题,我认为你的意思是通过说

来呈现

render 'some nested route'

我提供的上述路线可以让你做这样的事情......

render tag_posts_path(@tag),它将在帖子路径中查找索引操作。同样,rake routes显示了所有这些。

在谷歌上快速搜索嵌套路线会让你想到这一点。

Nested Routes