我有两个型号。用户和工作。我有一个联接表来表明用户对Job的兴趣。我正在为用户和工作使用has_and_belongs_to_many关系。我现在意识到我需要使用has_many:through关系。因此,我需要为我的连接表设置模型,否则会出现undefined Constant
错误。我的联接表名为jobs_users
。我应该为模型的.rb
文件命名,以及为了让Rails魔法工作,类名应该是什么?我发现SO问题意味着该类应该是JobUser
,但没有关于.rb
文件应该命名的内容。
答案 0 :(得分:1)
基于现有表的Rails模型的命名约定
模型类名称使用CamelCase
。这些是单数,并将自动映射到多个数据库表名。
> 'JobsUser'.underscore
=> "jobs_user"
这意味着您的文件应命名为jobs_user.rb
。课程将如下所示
class JobsUser < ApplicationRecord
...........
end
对于新迁移,您可以回滚并销毁当前表迁移,例如jobs_users
,然后运行此命令
rails g model UserJob user:references job:references
db/migrate/TIMESTAMP_create_user_jobs.rb
文件如下所示
class CreateUserJobs < ActiveRecord::Migration[5.1]
def change
create_table :user_jobs do |t|
t.references :user, foreign_key: true
t.references :job, foreign_key: true
t.timestamps
end
end
end
然后迁移它,创建的模型文件名为user_job.rb
has_many :through
关系将如下所示
#user.rb
class User < ApplicationRecord
has_many :user_jobs, dependent: :destroy
has_many :jobs, through: :user_jobs
end
#job.rb
class Job < ApplicationRecord
has_many :user_jobs, dependent: :destroy
has_many :users, through: :user_jobs
end
#user_job.rb
class UserJob < ApplicationRecord
belongs_to :user
belongs_to :job
end
那是