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
同样,我也失去了一些东西,没有看到更多的代码库。
检查Micropost.count
,@purchases.count
,@sales.count
(通过将它们打印在控制器或视图的某个部分中)来查看记录是否实际存在。
此外,如果您想渲染集合喜欢@sales
和@purchases
,则需要确保模型部分存在(在您的情况下为_micropost.html.erb
)。这可能是您需要查看视图错误的地方。对于你所知道的,该文件可能是空的,因此根本不会出现任何错误。
的问题也可能出在你的微柱#创建(或任何你要保存在微柱的动作),该微柱应与CURRENT_USER相关:
@micropost = current_user.microposts.build(params[:micropost])
考虑这一点,您刚才的问题到帐户,我建议你再次阅读RoR教程的原始代码(并验证所有测试都通过了),然后再将其分开。您可以随时为您的实验添加新的测试,并且可以帮助您找出错误发生的位置。
ok Micropost.count工作正常,但@ purchases.count和@ sales.count是零,直到我在控制器中定义它们。这是正确的吗?此外,我有一个_micropost.html.erb文件。我会在上面的问题中发布它。 – BigBoy1337
然后很可能是记录不存在,或者您没有在控制器中正确分配变量。 – prusswan
很有意思。这有效,输出正是它所需要的。但是他们仍然没有显示在视图中 – BigBoy1337
您的问题表明您在用户/ show视图中引用了@ sales和@ purchases,但是您没有在UsersController#show中设置这些变量。无论是在microposts/_show.html.erb中使用users/view代码还是在UsersController#show – rossta
中设置@ sales和@购买,你是对的。它没有在我的UsersController#show中定义。这是一个问题,因为microposts属于用户? – BigBoy1337