以下是用户显示他们应该出现的视图。 ..
<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://stackoverflow.com/questions/12505845/ruby-error-wrong-number-of-arguments-0-for-1#12505865)变量@microposts,@购买和@sales都在控制台中正确输出。
任何人都可以帮助我吗?
编辑:使用作为控制台中给出的答案建议的范围(它正确地输出所有内容,但它们仍未显示在视图中。这是否意味着我的用户显示页面的语法有问题?
编辑2:
这是view / 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>
答案 0 :(得分:1)
我在做一些假设而没有看到更多的代码,但看起来你可以 写下你所展示的内容有点不同。我假设您的数据库正在迁移 并具有所需的列,例如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| %>
<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#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
同样,如果没有看到更多的代码库,我可能会遗漏一些东西。
答案 1 :(得分:0)
检查Micropost.count
,@purchases.count
,@sales.count
(通过在控制器中打印它们,或视图的某些部分)来查看记录是否确实存在。
此外,如果您想要呈现类似@sales
和@purchases
的集合,则需要确保模型部分存在(在您的情况下为_micropost.html.erb
)。这可能是您需要查找视图错误的地方。如您所知,该文件可能为空,因此根本不会出现任何错误。
问题可能还在于你的微博#create(或者你要保存微博的动作),微博应该与current_user相关联:
@micropost = current_user.microposts.build(params[:micropost])
考虑到这个和您之前的问题,我建议您再次阅读RoR教程的原始代码(并验证所有测试都已通过),然后再将其拆开。您可以随时为实验添加新的测试,它们将有助于找出出错的地方。