Ruby on rails 正在创建与关联相关的对象,验证失败:类必须存在
我是RubyonRails的新手,通过建立一个网站来学习RubyonRails,但是我已经在这个特定的问题上呆了很长一段时间了 在我的设置中,我有两种型号:Ruby on rails 正在创建与关联相关的对象,验证失败:类必须存在,ruby-on-rails,Ruby On Rails,我是RubyonRails的新手,通过建立一个网站来学习RubyonRails,但是我已经在这个特定的问题上呆了很长一段时间了 在我的设置中,我有两种型号: class Project < ApplicationRecord belongs_to :user#, foreign_key: "owner_id", primary_key: "user_id", class_name "User" end class User < ApplicationRecord has
class Project < ApplicationRecord
belongs_to :user#, foreign_key: "owner_id", primary_key: "user_id", class_name "User"
end
class User < ApplicationRecord
has_many :projects#, dependent: :destroy, foreign_key: "projects", primary_key: "project_id"
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
end
它给我的验证失败:用户必须存在错误。我可以确认用户确实存在,它在数据库中,并且控制器在\u操作之前有:验证\u用户代码>,当我执行放置@user.attributes时,它会正确显示详细信息
如果可能的话,我真的不想对归属关联使用可选:true
,因为在没有所有者的情况下创建项目是没有意义的,除非这是处理问题的标准方法。任何关于创建方法的指导都将不胜感激 属于默认情况下需要的关联是一个相对较新且不受欢迎的更改,我可以说作为Rails的老手,您可能只想在学习时禁用它。如果您想在全球范围内实现这一点,可以将其添加到application.rb中
config.active\u record.properties\u to\u required\u默认为false
就控制器中的代码而言。。。试试这个
def create
@project = Project.new(project_params)
@project.user_id = current_user.id
# assuming you used scaffolding, these paths will work
# you can render/redirect anywhere you want after creating a project though
if @project.save
redirect_to @project
else
redirect_to new_project_path
end
end
您是否在路线中添加了
设计?请在此处找到当前用户,并查看example@noname谢谢你的评论!是的,它在我的routes.rb中,当我在create方法中正确显示@users.attributes时,
,因此我假设用户确实存在。您可能还可以将前两行组合到@project=project.new(project\u参数,user\u id:current\u user.id)
中,但我没有尝试过,但我很确定它会很好。我明白了,我本来是这样做的,而且很管用,但我想看看并了解是否有一种方法可以满足需要。如果我找不到解决方案而放弃,我会选择这个作为公认的答案,非常感谢你的建议!您是否尝试了新的控制器操作?这可能会解决你的问题,而不会改变你所属的任何东西。啊,对不起,我第一次读到这篇文章时一定是误解了。它工作得很好:D你知道为什么这个能工作,而不是我的吗?不管怎样,非常感谢!!
def create
@project = Project.new(project_params)
@project.user_id = current_user.id
# assuming you used scaffolding, these paths will work
# you can render/redirect anywhere you want after creating a project though
if @project.save
redirect_to @project
else
redirect_to new_project_path
end
end