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

问题描述:

这里是用户显示视图,他们应该显示在哪里。 ..RoR:我怎样才能让我的微博出现?

<section> 
    <div id= "purchases"> 
    <%= render 'shared/micropost_form_purchase' %> 
    </div> 
    <div id="sales"> 
    <%= render 'shared/micropost_form_sale' %> 
    </div> 
</section> 

<%= @sales %> <%# This is just to see if it outputs anything. It doesn't :(%> 
<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> 

所以形式(谐音)加载罚款,但后来当我发表的帖子,在任何一个,无论是采购名单,也没有销售列表中显示。我检查了数据库,并且它们正在创建,并在列中标明种类(销售或购买)。

这里是形式:

<%= form_for (@micropost) do |f| %> 

    <div class="field no-indent"> 
    <%= f.text_area :content, placeholder: "What's something else you want to buy?" %> 
    <%= hidden_field_tag 'micropost[kind]', "purchase" %> 
    </div> 
    <%= f.submit "Post", class: "btn btn-large btn-primary" %> 
<% end %> 

<%= form_for (@micropost) do |f| %> 

    <div class="field no-indent"> 
    <%= f.text_area :content, placeholder: "What's something else you want to buy?" %> 
    <%= hidden_field_tag 'micropost[kind]', "sale" %> 
    </div> 
    <%= f.submit "Post", class: "btn btn-large btn-primary" %> 
<% end %> 

也,这里是users_controller.rb

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

在这里表演的一部分是表演的一部分所述microposts_controller.rb

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://*.com/questions/12505845/ruby-error-wrong-number-of-arguments-0-for-1#12505865)变量@microposts的帮助下, @purchases和@sales都可以在控制台中正确输出。

任何人都可以帮我吗?

编辑:使用作用域作为在控制台中给出的答案建议(它输出一切正确,但他们仍然不显示在视图中,这是否意味着它是我的语法错误的用户显示?页面

编辑2:

这里是视图/微观柱/ _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> 

我正在做一些假设,没有看到更多的代码,但它看起来像你可以 写wha你有不同的表现。我假设你的数据库迁移 和有需要的列,例如,#微柱样,#微柱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| %> 
    <div class="field no-indent"> 
    <%= f.text_area :content, placeholder: "What's something else you want to buy?" %> 
    <%= f.hidden_field :kind, :value => "sale" %> 
    </div> 
    <%= f.submit "Post", class: "btn btn-large btn-primary" %> 
<% end %> 

在MicropostsController#节目,你可以使用你的新范围:

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

你也应该确认您MicropostsController#创建行动实际上是增加 的微柱给用户发送的形式(我假设当前的用户方法)。

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

您还可以确认轨控制台上的预期结果与创建购买或销售后,微柱:

Micropost.purchases 
Micropost.sales 

同样,我也失去了一些东西,没有看到更多的代码库。

+0

很有意思。这有效,输出正是它所需要的。但是他们仍然没有显示在视图中 – BigBoy1337

+0

您的问题表明您在用户/ show视图中引用了@ sales和@ purchases,但是您没有在UsersController#show中设置这些变量。无论是在microposts/_show.html.erb中使用users/view代码还是在UsersController#show – rossta

+0

中设置@ sales和@购买,你是对的。它没有在我的UsersController#show中定义。这是一个问题,因为microposts属于用户? – BigBoy1337

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

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

的问题也可能出在你的微柱#创建(或任何你要保存在微柱的动作),该微柱应与CURRENT_USER相关:

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

考虑这一点,您刚才的问题到帐户,我建议你再次阅读RoR教程的原始代码(并验证所有测试都通过了),然后再将其分开。您可以随时为您的实验添加新的测试,并且可以帮助您找出错误发生的位置。

+0

ok Micropost.count工作正常,但@ purchases.count和@ sales.count是零,直到我在控制器中定义它们。这是正确的吗?此外,我有一个_micropost.html.erb文件。我会在上面的问题中发布它。 – BigBoy1337

+0

然后很可能是记录不存在,或者您没有在控制器中正确分配变量。 – prusswan