Ruby on rails Rails:创建一个新的用户记录,分析数据,然后仅在数据返回true时创建一个新的Hipster

Ruby on rails Rails:创建一个新的用户记录,分析数据,然后仅在数据返回true时创建一个新的Hipster,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我想通过表单获取一些用户数据,然后用User.rb方法分析其中的一些数据。如果数据返回true,我想创建一个新的Hipster记录 我只想保存Hipster记录,而不是用户记录。一般用户记录对我来说是无用的 最简单的方法是使用一个Hipster模型,并在保存之前创建一组自定义验证。这是我目前的代码: Hipster.rb validate :hipster_status, :on => :create def hipster_status has_a_bike? has_a_mo

我想通过表单获取一些用户数据,然后用User.rb方法分析其中的一些数据。如果数据返回true,我想创建一个新的Hipster记录

我只想保存Hipster记录,而不是用户记录。一般用户记录对我来说是无用的

最简单的方法是使用一个Hipster模型,并在保存之前创建一组自定义验证。这是我目前的代码:

Hipster.rb

validate :hipster_status, :on => :create

def hipster_status
  has_a_bike?
  has_a_moustache?
  has_skinny_jeans?

  unless hipster?
    self.errors.add("aint a hipster")
  end

end

def has_a_bike?
 # run some code to see if User has a bike
end

def has_a_moustache?
 # run some code to see if User has a moustache
end

def has_skinny_jeans?
 # run some code to see if User has skinny jeans
end

def hipster?
 has_a_bike? && has_a_moustache? && has_skinny_jeans?
end
但是,将这些方法应用于Hipster模式感觉是错误的。调用
hipster.hipster?
感觉很奇怪,我觉得我应该创建一个临时用户,然后调用
User.hipster?
如果返回true,那么创建一个hipster(甚至不保存用户)

但是我很难想象新的架构。当用户访问用户的“新建”页面时,他们会向用户“创建”发布表单?但我不想创建一个用户。发布到用户#create而不打算创建记录可以吗


还是我只是想得太多了,应该坚持第一个版本

我同意罗格的评论。如果你想让用户拥有很多配件或其他额外的属性,那么制作一个关联的模型

如果您只对自行车、小胡子和紧身牛仔裤感兴趣,并且您使用的数据库支持Postgres之类的数组序列化,那么您可以做一些简单的事情,如:

class User < ActiveRecord::Base
  # add a text column to the users table named accessories
  serialize :accessories, Array

  def has_accessory(accessory_name)
    accessories.include? accessory_name
  end

  def is_hipster?
    has_accessory('bike') && has_accessory('mustache') && has_accessory('skinny jeans')
  end
end
class用户
hipster是一个具有特定属性的用户,因此我并不认为您需要hipster类。我不知道您的型号的使用案例是什么,但有一个选项是创建一个
附件
型号,以在多个关联中存储不同的用户附件。自行车、小胡子、紧身牛仔裤等都可以作为配件储存,新的配件可以随时添加,因此它的伸缩性非常好。您可以创建一个用户并添加/检查这些附件,以确定
user.is\u hipster?
user.is\u geek?
user.is\u android\u fanboy?
等。我想这是多余的,因为数据库中不会有任何不是hipster的用户。我保存的所有用户都将是时髦人士