ruby-on-rails – 如何验证关联是否有效
发布时间:2020-12-17 02:57:48 所属栏目:百科 来源:网络整理
导读:我有一个名为Profile的模型,它是belongs_to User,因此有’user_id’供数据库跟踪.在我为此模型制作的本地管理界面中,我想提供允许管理员在编辑屏幕中输入字段的用户名的灵活性,然后将其解析为user_id以保存在控制器中. 但问题是,如何检查用户名是否有有效回
我有一个名为Profile的模型,它是belongs_to User,因此有’user_id’供数据库跟踪.在我为此模型制作的本地管理界面中,我想提供允许管理员在编辑屏幕中输入字段的用户名的灵活性,然后将其解析为user_id以保存在控制器中.
但问题是,如何检查用户名是否有有效回报?我发现在ActiveRecord :: Validation中没有用于验证关联是否存在的方法.你将如何处理这样的情况? 更新:我想要做的是验证表单中的用户名字段确实是真实用户,然后我可以将user_id保存回管理员正在编辑的配置文件.这里’return’表示返回的用户对象. 解决方法
此问题是虚拟属性的理想选择.
而不是尝试解析用户名,让配置文件模型为您工作. class Profile belongs_to :user # ... def username user.try(:username) end def username=(value) self.user = User.find_by_username(value) end end 然后在你的表格 <% form_for @profile do |f| %> <%= f.text_field :username %> <% end %> 提交时,username字段的值将自动与所有其他真实的activerecord属性一起传递. ActiveRecord将查找username = setter并解析关联. 您可能希望自定义错误代码以使其更有意义. 编辑:添加了示例. validate :ensure_username_exists def username=(value) self.user_id = User.find_by_username(value) || 0 end protected def ensure_username_exists if user_id == 0 # nil is allowed errors.add(:user_id,"Username doesn't exists") return false end end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |