我正在开展一个项目,我对如何构建模型感到困惑,我感谢您的投入,以了解如何发展最适合项目要求的解决方案。
要求
用户注册后,它将能够完成配置文件(用户has_on:配置文件)。无论用户是在寻找工作还是在公司,无论用户正在寻找工作,该公司都可以查看该资料作为简历进行审核。 所有用户都应该能够创建一个或多个公司(用户has_many:公司,通过:::),公司将属于许多用户(公司has_mamy:用户,通过:::)。
以下是我的模型和迁移:
class Company < ApplicationRecord
has_many :roles
has_many :users, through: :roles
end
class Role < ApplicationRecord
belongs_to :company
belongs_to :user
end
class User < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :roles
has_many :companies, through: :roles
end
class CreateCompanies < ActiveRecord::Migration[5.1]
def change
create_table :companies do |t|
t.string :name, limit: 255, null: false
t.text :description, limit: 1500, null: false
t.timestamps null: false
end
end
end
class CreateRoles < ActiveRecord::Migration[5.1]
def change
create_table :roles do |t|
t.references :company, foreign_key: true
t.references :user, foreign_key: true
t.timestamps null: false
end
add_index :roles, [:user_id, :company_id]
end
end
用户由Devise完成。
我尝试了has_many_and_belongs_to
关联,但我发现它是限制因为我需要稍后与Role模型进行交互。如你所见,我会有不同的用途,'员工','求职者','创始人','投资者',...。等和其他互动。
求职者可以创建Notes,博客帖子和新闻但不创建职位或营销活动。虽然创始人会做所有事情。
我遇到以下问题:
我想表明:
更新
companies_controller.rb
我在检索users companies
和companies users or user
时遇到问题。
class CompaniesController < ApplicationController
before_action :authenticate_user!, only: %i[new create edit update destroy]
before_action :assign_company, except: %i[new create index]
def index
@companies = Company.all
end
def show
end
def new
@company = current_user.companies.build
end
def create
@company = current_user.companies.build(company_params)
if @company.save
redirect_to company_path(@company), notice: "Saved..."
else
render :new
end
end
def edit
return redirect_to company_path if current_user.id == @company.user.id
render :edit
end
def update
@company.update(company_params)
return redirect_to company_path(@company) if @company.save
render :edit
end
def destroy
@company.destroy
redirect_to companies_path, notice: 'Company was successfully destroyed.'
end
private
def assign_company
@company = Company.find(params[:id])
end
def company_params
params.require(:company).permit(:name, :description, :roles)
end
end
我觉得这很容易实现,我觉得我过于复杂了。我呢? 我很感激您的意见并帮助我了解最佳工作伙伴。
提前致谢。