Has_many加入表属于管理员用

时间:2018-05-02 14:27:11

标签: ruby-on-rails admin belongs-to role

我正在编写一个用于规划社交媒体编辑日历的rails日历应用程序。

我的关系是: 用户has_many Calendars,Calendar has_many Users

我正在尝试实施日历管理员,其中日历也属于管理员。管理员是创建日历的人。

我在这里搜索过,找到了不同的选项,只是has_many和belongs_to关系,而不是将belongs_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方法,并在日历控制器中删除了代码行,而在私有中的日历控制器中有一个私有方法:

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

在日历控制器的顶部有:

before_action :set_admin, only: :create

这给了我堆栈错误语法警告

我还尝试添加迁移以将管理列添加到Calendar表中,并将整数作为类型?

我确实为用户注册设置了Devise,但是如果可能的话,我正在尝试使用它来实现此功能。

2 个答案:

答案 0 :(得分:0)

我看到您在用户创建的新实体日历与当前的日历不相关而不保存。 请尝试:

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

是的,您需要添加迁移,将admin_id添加到日历

答案 1 :(得分:0)

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属性。 {{1 }}属性是:user_id模型的一部分。