我有一个用于创建团队的表单(模型是团队)。
表单将成员添加到团队中(通过模型TeamMember)。
每个团队都在为一家公司工作。所有用户都属于公司。
我目前对TeamMember模型进行了验证,当用户为团队工作的其他公司工作时,该模型会阻止用户成为团队成员。
最近,我被要求修改此功能,因为有时团队需要添加为不同公司工作的成员。
我的简单验证现在变得复杂了。
我现在需要在提议的团队成员为另一家公司工作时提供警告,并在保存更改之前让用户有机会确认(是/否)是否正常。
什么是干净,有轨道友好的方式来实现这一目标?我想有一个Ajax解决方案(也许是一个灯箱),但我不确定实现它的最佳方式,或者是否有人已经有一个聪明的Gem /插件来处理这种情况。
答案 0 :(得分:0)
我会像现在一样使用自定义验证,并为不保存到数据库的模型添加可修改的属性。例如:
class TeamMember < ActiveRecord::Base
attr_accessor :user_confirmed
after_intialize :setup
def setup
self.user_confirmed = false
end
end
如果self.user_confirmed为false,则需要在验证方法中添加一个检查。如果是,除了上面描述的db关系之外,使其无效。然后在您的视图中添加if语句:
<% if @team_member.errors[:key_you_use_to_add_to_base].first == "Error Message" %>
<%= f.label :user_confirmed, "User works for another company, are you sure?" %>
<%= f.check_box :user_confirmed, {}, "true", "false" %>
<% end %>
请记住,因为check_box方法使用字符串,所以您需要将params散列中该属性的结果转换为布尔值。
我认为应该这样做。请注意,如果可能将任何其他验证错误添加到同一个键,则可能需要调整if语句。