Я знаю, что это легко, но я не могу заставить его работать. Я создаю сайт, на котором пользователи могут создавать сообщения. Я хочу показать эти сообщения вместе с именем пользователя, которое содержится в таблице пользователя. Я не могу это показать! Я получаю эту ошибку:Rails 4 Отображение данных из нескольких таблиц
undefined method `name' for nil:NilClass
Вот мой код:
Модели:
class User < ActiveRecord::Base
has_many :posts\
class Post < ActiveRecord::Base
belongs_to :user
Контроллеры:
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
Вид:
<% @posts.each do |post| %>
<%= post.user.name %><BR><BR>
<%= post.post_content %><BR><BR>
<% end %>
Что вы получаете, когда делаете 'Post.includes (: user) .all.sort_by (&: created_at) .first' и' Post.includes (: user) .all.sort_by (&: created_at) .first .user.name' в консоли rails? – nikkon226
Если ваши объекты действительно связаны, вам не нужно будет включать пользователя. 'Post.first.user' должен возвращать объект пользователя. Похоже, что он возвращает нуль для вас, поэтому ваша связь не была сохранена. – jeremywoertink
Возможно, это связано с тем, что в вашем db есть запись, которая не была назначена ни одному пользователю. запустите этот запрос в 'rails console', чтобы узнать, есть ли они:' Post.where (user_id: nil) ' – Alireza