Has_many Присоединиться к таблице с принадлежностью для целей администратора - PullRequest
0 голосов
/ 02 мая 2018

Я пишу приложение-календарь для планирования календаря в социальных сетях.

Мои отношения: Пользователь has_many Календари, Calendar has_many Пользователи

Я пытаюсь внедрить администратора календаря, в котором календарь также принадлежит администратору. Администратор - это тот, кто создал календарь.

Я искал все здесь и нашел различные варианты, которые были просто отношениями has_many и own_to, не добавляя принадлежащие_для к отношениям соединения.

Я пытался сделать:

class Calendar < ApplicationRecord
has_many :user_calendars
has_many :users, :through => :user_calendars
has_many :calendar_posts
has_many :posts, :through => :calendar_posts
belongs_to :admin, :class_name => :User

def add_calendar 
Calendar.new(admin: self)
end 

class CalendarsController < ApplicationController 

def create 
@calendar = Calendar.new(calendar_params)
current_user.add_calendar
if @calendar.save 
redirect to @calendar 
else 
render :new 
end 
end 

private 
def calendar_params
params.require(:calendar).permit(:name, :user_id)
end

Это только что обновилось, и единственное, что я получил из журнала сервера, - это откат. Я набрал ошибки, и они были пустыми.

Я также попытался сделать что-то похожее на другой пост, который я видел здесь, где я удалил метод add_calendar из пользовательской модели и эту строку кода в контроллере календаря и вместо этого использовал приватный метод в контроллере календаря в private:

def set_admin
@calendar.admin.id = current_user.id
end 

А наверху календарного контроллера есть:

before_action :set_admin, only: :create

Это дало мне ошибку стека. Синтаксическое предупреждение

Я также пытался добавить миграцию для добавления столбца администратора в таблицу календаря с целым числом в качестве типа?

У меня есть Devise, настроенный для регистрации пользователей, но я пытался использовать Эшли для этой функции, если это возможно.

Ответы [ 2 ]

0 голосов
/ 02 мая 2018
def create 
  @calendar = Calendar.new(calendar_params)

  # you're just missing this line
  @calendar.admin = current_user

  # this doesn't do anything, so I commented this out
  # current_user.add_calendar

  if @calendar.save 
    redirect_to @calendar 
  else 
    render :new 
  end
end 

P.S. Я не знаю, почему вы разрешаете :user_id как часть def calendar_params, потому что ваша модель Calendar на самом деле не имеет атрибута :user_id. Атрибут :user_id является частью модели UserCalendar вместо этого.

0 голосов
/ 02 мая 2018

Я вижу, что вы создаете новый календарь сущностей у пользователя, не связанный с текущим, и не сохраняете его. Пожалуйста, попробуйте:

@calendar = Calendar.new(calendar_params.merge(admin: current_user)

И да, вам нужно добавить миграцию, где вы добавляете admin_id в календарь

...