如何通过Rails通过has_many创建新记录?

时间:2016-09-16 13:00:34

标签: ruby-on-rails activerecord

我目前正在努力解决has_many:通过我项目中的关联。

这是我的模特

class Group < ActiveRecord::Base

  has_many :user_groups ,dependent: :destroy
  has_many :users , through: :user_groups

end

class User < ActiveRecord::Base

  has_many :user_groups ,dependent: :destroy
  has_many :groups , through: :user_groups

end

class UserGroup < ActiveRecord::Base

  belongs_to :user , inverse_of: :placements
  belongs_to :group , inverse_of: :placements

  validates :level , presence: true

end

因此,当我尝试创建新组时,但它没有成功。 这是我的控制器

class GroupController < ApplicationController

    def create
        group = Group.new(group_params)
        group.users << User.find_by(id: current_user.id)

        if group.save
            render json: group, status: 201, location: [group]
        else
            render json: { errors: group.errors }, status: 422
        end
    end

    private

    def group_params
        params.require(:group).permit(:name, :shuttle_price, :court_price)
    end

end

但是当我调用create方法时,我收到了这个错误。

Could not find the inverse association for group (:placements in Group)

在这一行

group.users << User.find_by(id: 6)

那么我该如何解决这个问题?

谢谢!

1 个答案:

答案 0 :(得分:1)

删除:inverse_of

class UserGroup < ActiveRecord::Base
  belongs_to :user
  belongs_to :group

  validates :level , presence: true
end

您无需在此处添加inverse_of。阅读此when to use inverse_of