RoR中的ActiveRecord_Associations_CollectionProxy:0x0000000e490b98

时间:2016-05-10 04:41:49

标签: ruby-on-rails ruby

我正在使用ruby on rails创建一个应用程序,但是目前我遇到像db关系这样的问题,在我的代码下面:

公司

has_many :posts, :foreign_key => :company_id

发布

belongs_to :companies, :foreign_key => :company_id

控制器

@post = current_user.companies.all

视图

<% @post.each do |p| %>
  <%= p.posts.post_title %>
<% end %>

在代码上方显示错误。

如果我debug喜欢使用<%= debug p.posts %>,那么就会显示我companies下的所有帖子,但是当我使用<%= debug p.posts.post_title %>然后显示ActiveRecord_Associations_CollectionProxy:0x0000000e490b98

谢谢

2 个答案:

答案 0 :(得分:1)

我认为这里的问题是您尝试在:post_title上调用方法p.posts,这是一个ActiveRecord::Associations::CollectionProxy对象。

在您的示例中,p是一个Company对象,它有一个方法posts,它返回一个CollectionProxy对象,其行为很像列表帖子。该列表没有方法post_title,但该列表的每个元素都有一个方法post_title

所以,而不是

<% @post.each do |p| %>
  <%= p.posts.post_title %>
<% end %>

您需要以下内容:

<% @post.each do |company| %>
  <% company.posts.each do |post| %>
    <%= post.post_title %>
  <% end %>
<% end %>

还有两点需要注意:

1)变量@post的名称不准确。在尝试了解正在发生的事情时,不准确的变量名称会导致混淆。 current_user.companies.all返回公司列表,因此,它应显示为:

@companies = current_user.companies.all

@post = current_user.companies.all

2)向您显示的实际错误可能会显示为

Undefined Method 'post_title' for ActiveRecord_Associations_CollectionProxy:0x0000000e490b98

不仅仅是

ActiveRecord_Associations_CollectionProxy:0x0000000e490b98

在调试和寻求帮助时,注意引发异常的整个消息非常重要。

答案 1 :(得分:0)

因为companiy has_many:posts ........帖子是对象,你需要一个循环来显示所有帖子,例如     p.posts.each do | post |