gpt4 book ai didi

ruby-on-rails - 如何验证关联是否有效

转载 作者:数据小太阳 更新时间:2023-10-29 07:29:38 25 4
gpt4 key购买 nike

我有一个名为 Profile 的模型,它属于 User,因此数据库有“user_id”来跟踪。在我为这个模型制作的本地管理界面中,我想提供灵 active ,允许管理员在编辑屏幕的字段中输入用户名,然后将其解析为 user_id 以保存在 Controller 中。

但问题是,我如何检查用户名是否具有有效返回值?我发现在 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 %>

提交时,用户名字段的值会自动与所有其他真实的 activerecord 属性一起传递。 ActiveRecord 将查找 username= setter 并将解析关联。如果关联返回 nil(给定用户名不存在记录),则它将当前 user_id 设置为 nil,并且验证将按预期失败。

您可能希望自定义错误代码以使其更有意义。

编辑:添加示例。

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

关于ruby-on-rails - 如何验证关联是否有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1011744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com