【问题标题】:Strange routing in rails render partialsrails中的奇怪路由渲染部分
【发布时间】:2011-03-17 11:57:58
【问题描述】:

我是 Rails 的新手,我以为我终于弄明白了一些这种路由的东西,但整天都在绕着这个小圈子转。

我正在关注一个关于构建类似 twitter 的服务的教程,并且我已经从教程中获得了基础知识,但使用的是 Mongo 而不是 mySql。

我有 3 种类型的页面。 显示所有按日期排序的帖子的主页

显示来自特定用户的帖子的用户页面

显示来自用户朋友的帖子的帖子页面。

所以对于每一页,我都做了以下操作

1) 在相应的控制器中创建了一个方法来获取正确的帖子

2)创建了一个_posts.html.erb页面,显示参数各有不同

3) 在 index.html.erb 页面中为每个视图引用了部分。

控制器条目如下所示

定义索引 @posts = Post.all(:order => 'created_at DESC') 结尾

默认帖子 @posts = Post.all(:conditions => {'user_id' => params[:id]}, :order => 'created_at DESC') 结尾

部分是

@posts %>

每个视图中都有一个 _posts.html.erb 文件,并且每个都略有不同

home/_posts.html.erb 看起来像这样

发表于 前 发布者

posts/_post.html.erb 看起来像这样

发布者 52.hours.since %>

现在奇怪的是,在所有页面 index.html.erb、users/show.html.erb、posts/index.html.erb 上,显示的部分是 posts/_post.html.erb .其他的被完全忽略了。

我的理解是 render :partial 会从当前视图中获取 @posts 并渲染 _posts.html.erb 。但这并没有发生,因为只有 posts/_post.html.erb 正在从所有视图中呈现。

我查看了 routes.rb 文件,但其中没有任何会导致此问题的内容。

谁能告诉我为什么我没有显示正确的部分?

-----------已编辑 --------------------------------

views的目录结构如下

意见 - 家 -_post.html.erb -index.htlm.erb - 布局 - 帖子 -_post.html.erb -index.html.erb -posts.html.erb - 会话 - 用户 -_post.html.erb -new.html.erb -show.html.erb

我希望这会有所帮助。

【问题讨论】:

  • 你能给出你的views目录结构吗?什么是什么有点令人困惑。 users/show.html.erb 是作为子目录存在于 posts 内部还是外部。
  • 感谢 shripad,我在问题中添加了目录结构。也许这会有所帮助。

标签: ruby-on-rails


【解决方案1】:

您将集合作为参数传递,rails 期望成为部分名称。你的渲染调用应该是这样的

<%= render partial: "post", collection: @posts %>

这将渲染app/views/posts/_post.html.erb,将局部变量post 传递给部分。

此外,(有时很方便)有一个迭代对象可用于此视图,partial_name_iteration,它包含有关 @posts 集合的总大小和当前对象索引的信息。

【讨论】:

    【解决方案2】:
    "发布", :collection => @posts%>

    当你只传递集合时,也许 rails 会自动定义部分路径

    【讨论】:

    • 感谢 Bohdan,这确实有效,但问题是为什么?根据我对 RoR 的理解,我不需要传入集合。任何想法为什么在这种情况下需要它?
    • 我认为 rails 会自动将部分路径定义为“/posts/_post.rb”,因为当您使用“form_for @person”时,rails 会解析它并且输出为“form action="/persons /create" method="post"" 但我可能错了:)
    猜你喜欢
    • 2012-12-22
    • 2013-09-05
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多