我正在使用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
谢谢
答案 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 |