基于现有表的Rails模型的命名约定

时间:2018-02-25 05:48:19

标签: ruby-on-rails

我有两个型号。用户和工作。我有一个联接表来表明用户对Job的兴趣。我正在为用户和工作使用has_and_belongs_to_many关系。我现在意识到我需要使用has_many:through关系。因此,我需要为我的连接表设置模型,否则会出现undefined Constant错误。我的联接表名为jobs_users。我应该为模型的.rb文件命名,以及为了让Rails魔法工作,类名应该是什么?我发现SO问题意味着该类应该是JobUser,但没有关于.rb文件应该命名的内容。

1 个答案:

答案 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

那是