我是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
我希望有所帮助。
答案 0 :(得分:1)
当你只传递集合
时,rails可能会自动定义部分路径答案 1 :(得分:0)
您正在将集合作为参数传递,即rails期望成为部分名称。您的渲染调用应如下所示:
<%= render partial: "post", collection: @posts %>
这将呈现app/views/posts/_post.html.erb
,并将局部变量post
传递给局部变量。
此外(有时很方便),有一个迭代对象可用于此视图partial_name_iteration
,该对象具有有关@posts
集合的总大小和当前索引的信息。对象。