Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 4显示来自多个表的数据_Ruby On Rails_Ruby_Postgresql - Fatal编程技术网

Ruby on rails Rails 4显示来自多个表的数据

Ruby on rails Rails 4显示来自多个表的数据,ruby-on-rails,ruby,postgresql,Ruby On Rails,Ruby,Postgresql,我知道这很容易,但我不能让它工作。我正在创建一个用户可以创建帖子的网站。我想显示那些帖子以及用户名,用户名包含在用户表中。我看不出来!我得到这个错误: undefined method `name' for nil:NilClass 这是我的密码: 型号: class User < ActiveRecord::Base has_many :posts\ class Post < ActiveRecord::Base belongs_to :user class用户

我知道这很容易,但我不能让它工作。我正在创建一个用户可以创建帖子的网站。我想显示那些帖子以及用户名,用户名包含在用户表中。我看不出来!我得到这个错误:

undefined method `name' for nil:NilClass
这是我的密码:

型号:

class User < ActiveRecord::Base
  has_many :posts\

class Post < ActiveRecord::Base
  belongs_to :user
class用户
控制器:

class PostsController < ApplicationController
  def index
    @posts = Post.includes(:user).all.sort_by &:created_at
    @posts.reverse!
  end

class UsersController < ApplicationController 
  def index
    @users = User.all.order(:name)
  end
class PostsController
视图:







似乎可以在应用程序中不使用用户添加帖子。因此,您可以将其替换为
post.user.try!(:name)


另外,你最好使用
.order(:created_at)
而不是
sort by(&:created_at)

当你在rails控制台中执行
Post.includes(:user).all.sort by(&:created_at).first
Post.includes(:user).all.sort by(&:created_at).first.user.name
)时会得到什么?如果你的对象确实相关,这样就不需要包括用户
Post.first.user
应返回用户对象。看起来它为您返回了nil,因此您的关联未保存。这可能是因为您的数据库中有一条post记录尚未分配给任何用户。在
rails控制台中运行此查询,查看是否有:
Post。where(user\u id:nil)
@MandyM,您可以为异常添加回溯吗?您可以用
替换当前输出,最后检查一次。你可以找到失败的帖子,错过了。您可以使用
.order(在::desc创建)
并删除
。反向。我刚检查过。我的所有帖子都有关联的用户,我的所有用户都有名字。
<% @posts.each do |post| %>
  <%= post.user.name %><BR><BR>
  <%= post.post_content %><BR><BR>
<% end %>