Как создать запись отношения has_many в рельсах? - PullRequest
1 голос
/ 29 мая 2020

У меня есть модель пользователя с некоторыми отношениями, и я хочу, чтобы пользователь мог создавать сообщения. Итак, я создал модель поста. Модели показаны ниже:

User.rb
belongs_to :plan

  has_one :profile

  has_many :posts

  has_many :follower_relationships, class_name: "Follow", foreign_key: "following_id"
  has_many :followers, through: :follower_relationships, source: :follower

  has_many :following_relationships, class_name: "Follow", foreign_key: "user_id"
  has_many :following, through: :following_relationships, source: :following

Post.rb
belongs_to :User

Итак, моя попытка создать запись:

def new
    @post = Post.new(user: current_user.id)
  end

  def create
    @post = @user.posts.create(post_params.merge(user_id: @user))

    if @post.save
      flash[:success] = "Post successfully created"
      redirect_to @post
    else
      flash[:danger] = @post.errors.messages.inspect
      render 'new'
    end
  end

Однако она возвращает ошибку {:User=>["must exist"]}. Но Пользователь существует и передается в форму. Затем решил попробовать создать сообщение в консоли rails.

 o = User.first.posts.build(image_url: "https://images.pexels.com/photos/188777/pexels-photo-188777.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940", title: "some", subtitle: "thing", body: "body")
o.save!

и он вернул ActiveRecord::RecordInvalid (Validation failed: User must exist)

Почему рельсы думают, что пользователя не существует ??

1 Ответ

0 голосов
/ 29 мая 2020

A user - запись, user_id - целочисленное поле. Вы их сбиваете с толку.

Значит, это не работает ...

@post = Post.new(user: current_user.id)

Вместо этого сделайте ...

@post = Post.new(user_id: current_user.id)

или лучше ...

@post = Post.new(user: current_user)

то же самое, где вы установили user_id: @user ... вы, вероятно, захотите user_id: @user.id

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...