rails中的奇怪路由呈现部分

时间:2010-07-18 03:54:51

标签: ruby-on-rails

我是rails的新手,并且认为我终于想出了一些这样的路由,但是这一天一直在圈内。

我正在学习关于构建类似Twitter的服务的教程,我已经从教程中学到了基础知识,但使用的是Mongo而不是mySql。

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

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

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

因此,对于每个页面,我都完成了以下内容

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

2)创建了一个带有显示参数的_posts.html.erb页面,每页都略有不同

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

控制器条目如下所示

  def index
   @posts = Post.all(:order => 'created_at DESC')
  end

def posts
  @posts = Post.all(:conditions => {'user_id' => params[:id]}, :order => 'created_at DESC')
    end

,部分是

<%= render :partial => @posts %>

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

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

<%= div_for post do %>
    Posted <%= time_ago_in_words(post.created_at) %> ago
    Posted By <%= post.user_id %>
    <%= post.text %>
<% end %>

而帖子/ _post.html.erb看起来像这样

<%= div_for post do %>
    Posted By <%= post.user_id %>
    <%= post.text %>
<% if post.created_at > 52.hours.since %>
    <%= distance_of_time_in_words_to_now(post.created_at) %>
        <% else %>
        <%= post.created_at.strftime("%c") %>
        <% end %>
<% end %>


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

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

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

有人可以告诉我为什么我没有展示适当的部分内容吗?

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

视图的目录结构如下

views 
      - home
            -_post.html.erb
            -index.htlm.erb
      - layouts
      - posts
            -_post.html.erb
            -index.html.erb
            -posts.html.erb
      - sessions 
      - users
            -_post.html.erb
            -new.html.erb
            -show.html.erb

我希望有所帮助。

2 个答案:

答案 0 :(得分:1)

“post”,:collection =&gt; @帖子%GT;

当你只传递集合

时,rails可能会自动定义部分路径

答案 1 :(得分:0)

您正在将集合作为参数传递,即rails期望成为部分名称。您的渲染调用应如下所示:

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

这将呈现app/views/posts/_post.html.erb,并将局部变量post传递给局部变量。

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