【问题标题】:RoR: How can I get all of my users microposts to show up in one place?RoR:我怎样才能让我所有的用户微博出现在一个地方?
【发布时间】:2012-09-23 09:49:04
【问题描述】:

我希望它们显示在主页上。我想我可能遇到了麻烦,因为有一个belong_to has_many 关系。每个微博都属于_一个用户,每个用户都有_许多微博。我让他们出现在用户页面上(但那只是用户微博的列表,而不是我想要在主页上的所有人)。如果从视图中看不清楚。我想要两个单独的列表。每个人的微博列表都有“购买”和所有“销售”微博的另一个列表。 Kind是微博数据库中的一列。现在什么都没有出现,也没有错误......

这里是 app/views/static_pages/home.html.erb

<div id="purchases list">
  <ol class="microposts">
    <%= render @purchases unless @purchases.nil? %>
  </ol>
</div>

<div id="sales list">
  <ol class="microposts">
    <%= render @sales unless @sales.nil? %>
  </ol>
</div>

这里是 app/views/microposts/_micropost.html.erb(我不确定这是否重要)

<li>
  <span class="content"><%= micropost.content %></span>
  <span class="timestamp">
    Posted <%= time_ago_in_words(micropost.created_at) %> ago.
  </span>
  <% if current_user?(micropost.user) %>
    <%= link_to "delete", micropost, method:  :delete,
                                     confirm: "You sure?",
                                     title:   micropost.content %>
  <% end %>
</li>

我在模型文件 (micropost.rb) 中的微帖子定义中使用范围可能很重要

scope :purchases, where(:kind => "purchase")
  scope :sales, where(:kind => "sale")

这里是 microposts_controller.rb

class MicropostsController < ApplicationController
  before_filter :signed_in_user
  before_filter :correct_user,   only: :destroy


  def home
    @microposts=Micropost.all
    @purchases=@microposts.collect{ |m| m if m.kind == "purchase"}.compact
    @sales=@microposts.collect{ |m| m if m.kind == "sale"}.compact
  def show

    @micropost = Micropost.find(params[:id])
    @microposts = @user.microposts
    @purchases= @microposts.purchases
    @sales = @microposts.sales

  end

这里是 users_controller.rb

class UsersController < ApplicationController
  before_filter :signed_in_user, 
                only: [:index, :edit, :update, :destroy, :following, :followers]
  before_filter :correct_user,   only: [:edit, :update]
  before_filter :admin_user,     only: :destroy

  def index
    @users = User.paginate(page: params[:page])
  end

  def show
    @user = User.find(params[:id])
    @micropost=Micropost.new
    @microposts = @user.microposts
    @purchases= @microposts.purchases
    @sales = @microposts.sales
  end

  def home

    @microposts = Micropost.all
    @purchases = @microposts.collect{ |m| m if m.kind == "purchase"}.compact
    @sales = @microposts.collect{ |m| m if m.kind == "sale"}.compact
  end

【问题讨论】:

  • 您似乎缺少endMicropostsController#home。我预计这会导致错误,所以它可能是一个错字?
  • 另外,我认为.select{|m| m.kind = 'purchase'} 会优于.collect{|m| m if m.kind = 'purchase'}.compact,但这并不能直接解决您的问题。
  • 你是对的类型。但这并没有解决错误。 .select 在控制台中运行良好

标签: ruby ruby-on-rails-3


【解决方案1】:

您的XController 将在app/views/X 中查找视图模板,因此您需要将home.html.erb 移出app/views/static_pages 并移入app/views/usersapp/views/microposts。另外,为什么你在两个控制器中有相同的home 方法?

如果这对您不起作用,我想知道 (a) 您正在浏览的 URL,以及 (b) 您的 routes.rb 文件中的内容。

【讨论】:

  • 哇,好用。我不得不将 home.html.erb 移动到 microposts 文件夹中,并将 routes.rb 文件更改为首先路由到那里而不是 static_pages/home。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-23
  • 1970-01-01
  • 1970-01-01
  • 2023-02-09
  • 2017-07-21
  • 2013-08-25
  • 1970-01-01
相关资源
最近更新 更多