【问题标题】:Rails-Mongoid-Devise: On create, error message "User can't be blank"Rails-Mongoid-Devise:创建时,错误消息“用户不能为空”
【发布时间】:2018-09-23 03:42:01
【问题描述】:

简单地说,我在 Rails 5.2 应用程序中使用 Mongoid 和 Devise。在模型文件中,一个用户has_many :trips 和一个旅行belongs_to :user。提交表单以创建新行程时,保存失败并出现错误“用户不能为空”。我可以通过在保存操作之前设置@trip.user = current_user 来解决问题,并且在数据库和后续查询中看起来都很好,但我不记得以前必须这样做。自从我使用 Rails 做任何实际工作已经有一段时间了(从 1.1 开始,真的 - 是的,那么久),但我不记得必须使用 ActiveRecord 模型来做这件事。我在想在模型中设置关联应该解决这个问题。是否发生了重大变化,或者 Mongoid 有什么不同?在保存之前我确实弄乱了参数哈希(使用trip_params.to_h),因为我需要将字符串转换为数组,但即使在我更改哈希之前,我也看不到任何用户的迹象。

【问题讨论】:

    标签: ruby-on-rails mongoid


    【解决方案1】:

    如果您要在用户对象的实例上创建行程,例如

    @user = User.find(params[:user_id])
    

    然后

    @user.create_trip(attributes)
    

    那么你不需要在创建行程时设置用户。但是如果你是直接创建行程

    Trip.new(attributes)
    trip.save!
    

    那么您必须在创建行程时指定用户

    如果为对象指定的所有关联都已完成或没有为我们设置关联,则不会处理任何活动记录

    【讨论】:

    • 谢谢。后来我意识到我必须做一些事情来识别用户,并且模型关联只是为了在数据库中设置正确的外键字段。我还查看了几年前的 Rails 1.1 项目,我确实必须在创建时设置用户 ID。不过,我不熟悉 create_ 语法,所以我很高兴学到了一些新东西!
    • 感谢乐于帮助..!!
    猜你喜欢
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 2012-08-20
    • 2021-09-07
    • 2011-07-26
    相关资源
    最近更新 更多