我正在编写一个用于规划社交媒体编辑日历的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,但是如果可能的话,我正在尝试使用它来实现此功能。
答案 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
模型的一部分。