简单来说,我在Rails 5.2应用程序中使用Mongoid和Devise。在模型文件中,有一个用户has_many :trips
和一个旅行belongs_to :user
。提交表单以创建新的行程时,保存失败,并显示错误“用户不能为空”。我可以通过在保存操作之前设置@trip.user = current_user
来解决问题,并且在数据库和后续查询中都看起来不错,但是我不记得必须这样做。自从我对Rails进行任何真正的工作已经有一段时间了(从1.1开始,确实如此-是的,很长一段时间),但是我不记得必须使用ActiveRecord模型来做到这一点。我当时认为在模型中设置关联应该可以解决这一问题。发生了重大变化,还是Mongoid有所不同?保存之前,我确实弄乱了params哈希(使用trip_params.to_h
),因为我需要将字符串转换为数组,但是即使在更改哈希之前,也看不到哈希中有任何用户的迹象。>
答案 0 :(得分:1)
如果要在用户对象之类的实例上创建行程
@user = User.find(params[:user_id])
然后
@user.create_trip(attributes)
那么您无需在创建行程时设置用户。但是,如果您直接像在创建行程一样
Trip.new(attributes)
trip.save!
然后,您必须在创建旅程时指定用户
为该对象指定的所有关联都已满或没有为我们设置关联