RoR:我怎样才能让我的微博出现?

这是用户显示他们应该出现的视图。 ..

所以表格(部分)加载正常,但是当我发帖时,在任何一个中,购买清单和销售清单都不会显示。 我检查了数据库,并且正在创建它们以及列中的条目,表示种类(销售或购买)。

以下是表格:

  

  

另外,这是users_controller.rb的show部分

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

这是microposts_controller.rb的show部分

 def show @micropost = Micropost.find(params[:id]) @microposts = Micropost.where(:user_id => @user.id) @purchases= @microposts.collect{ |m| m if m.kind == "purchase"}.compact @sales = @microposts.collect{ |m| m if m.kind == "sale"}.compact end 

另外,在这篇文章的帮助下(http://stackoverflow.com/questions/12505845/ruby-error-wrong-number-of-arguments-0-for-1#12505865)变量@microposts,@purchases和@sales都在控制台中正确输出。

谁能帮我吗?

编辑:使用作为控制台中给出的答案建议的范围(它正确地输出所有内容,但它们仍未显示在视图中。这是否意味着我的用户显示页面的语法有问题?

编辑2:

这是view / microposts / _micropost.html.erb代码

 
  • Posted ago.
  • 我在做一些假设而没有看到更多的代码,但看起来你可以用不同的方式写出你所展示的内容。 我假设您的数据库正在迁移并具有所需的列,例如,Micropost#kind,Micropost#user_id等。您可以使用范围更明确地优化微博集合。 阅读有关ActiveRecord范围的信息可能会有所帮助: http : //guides.rubyonrails.org/active_record_querying.html#scopes 。

     class Micropost < ActiveRecord::Base belongs_to :user scope :purchases, where(:kind => "purchase") scope :sales, where(:kind => "sale") # your code end 

    我还假设你的用户有很多微博:

     class User < ActiveRecord::Base has_many :microposts # your code end 

    对于表单,我建议将隐藏字段附加到表单对象(f.hidden_​​field),这样您就不必将名称指定为'micropost [kind]'。

     <%= form_for(@micropost) do |f| %> 
    <%= f.text_area :content, placeholder: "What's something else you want to buy?" %> <%= f.hidden_field :kind, :value => "sale" %>
    <%= f.submit "Post", class: "btn btn-large btn-primary" %> <% end %>

    在MicropostsController#show中,您可以使用新的范围:

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

    您还应确认您的MicropostsController #create操作实际上是将微博添加到发送表单的用户(我假设当前的用户方法)。

     def create @micropost = current_user.microposts.create(params[:micropost]) # yada end 

    您还可以在创建购买或销售微博后在rails控制台上确认预期结果:

     Micropost.purchases Micropost.sales 

    再一次,我可能会遗漏一些东西而不会看到更多的代码库。

    检查Micropost.count@purchases.count@sales.count (通过在控制器中打印它们,或视图的某些部分)来查看记录是否确实存在。

    此外,如果要渲染集合,如@sales@purchases ,则需要确保模型部分存在(在您的情况下为_micropost.html.erb )。 这可能是您需要查找视图错误的地方。 如您所知,该文件可能为空,因此根本不会出现任何错误。

    问题可能还在于你的微博#create(或者你要保存微博的任何动作),微博应该与current_user相关联:

     @micropost = current_user.microposts.build(params[:micropost]) 

    考虑到这个和您之前的问题,我建议您再次阅读RoR教程的原始代码(并validation所有测试都已通过),然后再将其拆开。 您可以随时为其进行实验添加新测试,它们将有助于找出出错的地方。