Атрибут отображения Rails из отношения has_and_belongs_to_many - PullRequest
0 голосов
/ 02 октября 2018

Итак, у меня есть сотрудники и регионы.Сотрудники могут / не могут принадлежать к Региону так же, как Регион может / не может иметь Сотрудника.

Модели:

Employee
 has_and_belongs_to_many :region, optional: true
Region
 has_and_belongs_to_many :employees, optional: true

У меня есть таблица соединений, которая выглядит следующим образом:

create_table "employees_regions", id: false, force: :cascade do |t|
 t.integer "employee_id"
 t.integer "region_id"
 t.datetime "created_at", null: false
 t.datetime "updated_at", null: false
 t.index ["employee_id"], name: "index_employees_regions_on_employee_id"
 t.index ["region_id"], name: "index_employees_regions_on_region_id"
end

Контроллер моего сотрудника:

class Admin::EmployeesController < Admin::ApplicationController
  belongs_to_app :employees
  add_breadcrumb 'Employees', :admin_employees_path
  before_action :load_employee, only: [:show, :edit, :update, :destroy]

  def index
    @employees = Employee.ordered.paginate(page: params[:page])
    @employees = @employees.search(params[:search]) if params[:search]
    respond_with @employees
  end

  def show
    respond_with @employee
  end

  def new
    @employee = Employee.new
    respond_with @employee
  end

  def create
    @employee = Employee.new(employee_params)
    flash[:notice] = 'Employee created successfully' if @employee.save
    respond_with @employee, location: admin_employees_path
  end

  def edit
    respond_with @employee
  end

  def update
    flash[:notice] = 'Employee updated successfully' if @employee.update_attributes(employee_params)
    respond_with @employee, location: admin_employees_path
  end

  def destroy
    flash[:notice] = 'Employee deleted successfully' if @employee.destroy
    respond_with @employee, location: admin_employees_path
  end

  private

  def load_employee
    @employee = Employee.find_by!(id: params[:id])
  end

  def employee_params
    params.require(:employee).permit(:first_name, :last_name, :title, :leadership, :bio, :avatar, :region, :region_id)
  end
end

Затем вмой взгляд:

.table-responsive
table.table.table-striped.table-hover
  thead
    tr
      th First Name
      th Last Name
      th Title
      th Avatar
      th Leadership
      th Region
      th &nbsp;
  tbody
    - @employees.each do |employee|
      tr
        td = employee.first_name
        td = employee.last_name
        td = employee.title
        td = image_tag employee.avatar
        td = employee.leadership
        td = employee.region.map(&:name).join(', ')

И тут возникает проблема.Для региона ничего не отображается.Я пробовал следующее: employee.region_id (показывает правильный связанный идентификатор), employee.region (&: name) (показывает Region :: ActiveRecord_Associations_CollectionProxy123), employee.region.name (показывает Region) и employee.region & .name(показывает регион).

То, что я ищу, это название региона.Поэтому, если работник работает на Северо-востоке, он должен сказать, что Северо-Восток, а не Регион.Как мне указать название региона в представлении сотрудника?

1 Ответ

0 голосов
/ 02 октября 2018

Обновлена ​​модель для использования множественного числа, затем обновлены параметры контроллера:

 def employee_params
  params.require(:employee).permit(:first_name, :last_name, :title, :leadership, :bio, :avatar, :regions).tap do |employee|
  employee[:region_ids] = [employee[:regions].to_i]
  employee.delete(:regions)
 end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...