在Rails 5中指导许多用户和许多公司之间的关系

时间:2018-02-20 18:41:52

标签: ruby-on-rails ruby associations

我正在开展一个项目,我对如何构建模型感到困惑,我感谢您的投入,以了解如何发展最适合项目要求的解决方案。

要求

用户注册后,它将能够完成配置文件(用户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 companiescompanies 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

我觉得这很容易实现,我觉得我过于复杂了。我呢? 我很感激您的意见并帮助我了解最佳工作伙伴。

提前致谢。

0 个答案:

没有答案