Has_many 连接表,用于管理目的

Posted

技术标签:

【中文标题】Has_many 连接表,用于管理目的【英文标题】:Has_many Join table with a belongs to for admin purposes 【发布时间】:2018-10-12 17:01:29 【问题描述】:

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

我的人际关系是: 用户 has_many 日历,日历 has_many 用户

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

我在这里到处搜索,发现只是 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

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

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

我确实为用户注册设置了 Devise,但如果可能的话,我试图让 Ashli​​e 使用它来实现此功能。

【问题讨论】:

【参考方案1】:
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 

附注我不知道你为什么允许:user_id 作为def calendar_params 的一部分,因为你的Calendar 模型实际上没有:user_id 属性。:user_id 属性是UserCalendar 的一部分代替模型。

【讨论】:

我在创建表单中有 :user_id,因为我试图将其传递进去,但我错了。当我刚刚进行了您建议的更改时,我的程序视图中 的每个地方都变成了空白?【参考方案2】:

我看到您在用户中创建了一个与当前无关的新实体日历,而不保存它。 请尝试:

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

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

【讨论】:

如果我使用别名,admin_id 是否重要?我是个大新手。 是的,是附加关联,与many_to_many无关。因此,如果您添加 admin_id 并更改控制器代码作为响应,它应该可以工作

以上是关于Has_many 连接表,用于管理目的的主要内容,如果未能解决你的问题,请参考以下文章

Rails 4,通过连接表在has_many中指定自定义外键?

使用has_many创建表分类:through用于类别和帖子

ActiveRecord :inverse_of 不适用于 has_many :through 在创建时的连接模型上

thinkphp一对多HAS_MANY

Rails - 按连接表数据排序

Rails has_many :通过连接模型中的额外属性查找