0

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

<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、@purchases 和@sales 都在控制台中正确输出。

谁能帮我吗?

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

编辑2:

这是视图/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>
4

2 回答 2

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

同样,如果没有看到更多的代码库,我可能会遗漏一些东西。

于 2012-09-20T22:13:15.873 回答
0

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

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

问题也可能在于您的 microposts#create(或您保存微帖子的任何操作),微帖子应与 current_user 相关联:

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

考虑到这个问题和您之前的问题,我建议您在拆开之前再次查看 RoR 教程的原始代码(并验证所有测试是否通过)。你总是可以为你的实验添加新的测试,它们将有助于找出你出错的地方。

于 2012-09-21T04:09:41.193 回答