Rails表单验证与数据库调用和确认

时间:2011-10-20 19:39:47

标签: ruby-on-rails validation jquery confirm

我有一个用于创建团队的表单(模型是团队)。

表单将成员添加到团队中(通过模型TeamMember)。

每个团队都在为一家公司工作。所有用户都属于公司。

我目前对TeamMember模型进行了验证,当用户为团队工作的其他公司工作时,该模型会阻止用户成为团队成员。

最近,我被要求修改此功能,因为有时团队需要添加为不同公司工作的成员。

我的简单验证现在变得复杂了。

我现在需要在提议的团队成员为另一家公司工作时提供警告,并在保存更改之前让用户有机会确认(是/否)是否正常。

什么是干净,有轨道友好的方式来实现这一目标?我想有一个Ajax解决方案(也许是一个灯箱),但我不确定实现它的最佳方式,或者是否有人已经有一个聪明的Gem /插件来处理这种情况。

1 个答案:

答案 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语句。