首先让我为一个看似简单的问题道歉,但是对于 Rails、Ruby 和编程的新手,我觉得我已经用尽了“Rails 新手”教程。
这就是我所反对的。
我有一个用户模型和机构模型,它们具有“has_many :through => :company_reps”关系。
用户具有基本字段(姓名、电子邮件、密码)(我正在使用devise)
该机构有许多字段,但相关的字段是(客户 = 布尔值,潜在客户 = 布尔值,演示日期 = 日期/时间)更复杂的是,每个机构可以有一个或两个用户,但大多数只有一个。
我们正在为用户举办比赛,我需要根据 demo_date 字段和 client 字段为每个用户奖励积分。
所以首先我需要做的是给每个用户 10 分,这与作为客户的机构相关,除非该机构有 2 个用户,在这种情况下,我需要给这两个用户每个 5 分。
其次,我需要给与 2012 年 2 月之后有演示日期的机构相关的所有用户 1 分。
我正在使用 Ruby 1.9.2、Rails 3.2.8 和 MySQL
- 那么,我该如何实现呢?
- 我应该创建一个新表和模型来存储点,如果是,我该如何保存计算?
- 我应该把所有的计算放在用户或机构模型中吗?
一如既往地感谢您的帮助。
MySQL机构信息
CREATE TABLE `institutions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`state_id` int(11) DEFAULT NULL,
`company` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`clientdate` datetime DEFAULT NULL,
`street` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`city` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`zip` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`source` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`source2` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`demodate1` datetime DEFAULT NULL,
`demodate2` datetime DEFAULT NULL,
`demodate3` datetime DEFAULT NULL,
`client` tinyint(1) DEFAULT NULL,
`prospect` tinyint(1) DEFAULT NULL,
`alead` tinyint(1) DEFAULT NULL,
`notcontacted` tinyint(1) DEFAULT NULL,
`created_at` datetime NOT NULL,
`updated_at` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7805 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
制度模式
class Institution < ActiveRecord::Base
attr_accessible :company, :phone, :assets, :clientdate, :street, :city, :state_id, :zip, :source, :source2, :demodate1, :demodate2, :demodate3, :client, :prospect, :alead, :notcontacted
belongs_to :state
has_many :users, :through => :company_reps
has_many :company_reps
end
用户模型
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable,
# :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me, :first_name, :last_name
# attr_accessible :title, :body
has_many :states, :through => :rep_areas
has_many :institutions, :through => :company_reps
has_many :rep_areas
has_many :company_reps
def name
first_name + " " + last_name
end
end
公司代表模型
class CompanyRep < ActiveRecord::Base
belongs_to :user
belongs_to :institution
end