Ruby on rails 嵌套属性未在联接表中保存用户id

Ruby on rails 嵌套属性未在联接表中保存用户id,ruby-on-rails,associations,nested-attributes,Ruby On Rails,Associations,Nested Attributes,管理员主控制器: def new @admin = Admin.new @invitation = @admin.invitations.build @admi.user_admin_relationships.build end def create params[:invitation][:sender_id] = current_user.id @admin = Admin.new(params[:admin]) if @admin.save redire

管理员主控制器:

def new
  @admin = Admin.new
  @invitation = @admin.invitations.build
  @admi.user_admin_relationships.build
end

def create
  params[:invitation][:sender_id] = current_user.id
  @admin = Admin.new(params[:admin])
  if @admin.save
    redirect_to root_path
  else
    render 'new'
  end
end
params[:invitation][:sender_id] = current_user.id
邀请模式

belongs_to :admin
belongs_to :user
has_many :invitations
has_many :user_admin_relationships
has_many :users, :through => :user_admin_relationships

accepts_nested_attributes_for :invitations
accepts_nested_attributes_for :user_admin_relationships, :allow_destroy => true
has_many :invitations
has_many :user_admin_relationships
has_many :admins, :through => :user_admin_relationships
管理模式

belongs_to :admin
belongs_to :user
has_many :invitations
has_many :user_admin_relationships
has_many :users, :through => :user_admin_relationships

accepts_nested_attributes_for :invitations
accepts_nested_attributes_for :user_admin_relationships, :allow_destroy => true
has_many :invitations
has_many :user_admin_relationships
has_many :admins, :through => :user_admin_relationships
用户模型

belongs_to :admin
belongs_to :user
has_many :invitations
has_many :user_admin_relationships
has_many :users, :through => :user_admin_relationships

accepts_nested_attributes_for :invitations
accepts_nested_attributes_for :user_admin_relationships, :allow_destroy => true
has_many :invitations
has_many :user_admin_relationships
has_many :admins, :through => :user_admin_relationships
“我的表单”是嵌套表单,它可以很好地保存每个表单的字段和项目,例如
created\u at
sent\u at
但是,它不会保存
用户id
(用户管理加入表)和
发送者id
(邀请表)。

我尝试向管理控制器添加不同的排列,但没有任何效果

不起作用的事情:

def new
  @admin = Admin.new
  @invitation = @admin.invitations.build
  @admi.user_admin_relationships.build
end

def create
  params[:invitation][:sender_id] = current_user.id
  @admin = Admin.new(params[:admin])
  if @admin.save
    redirect_to root_path
  else
    render 'new'
  end
end
params[:invitation][:sender_id] = current_user.id
这给了我一个nil对象,当我没想到它会出错时

params[:invitation].merge!(:sender_id = current_user.id)
这给了我一个“错误的语法错误”

这给了我意外的“=”和“期望关键字结束”错误

我也尝试过其他一些不同的排列方式。我的联想有什么问题吗?如何更新邀请表中的
sender\u id
,以及rich join user\u admin\u relationship表中的
user\u id
?我知道我可以通过
隐藏的\u字段进行操作,但听说这不安全,所以我不想这样做。

使用:

params[:invitation].merge!(:sender_id => current_user.id)
请注意
=>
,而您只有
=
。但是,在您的
创建
操作中,您正在将其添加到
参数[:invitation]
,但是您没有将其保存到任何位置,因此它只是丢失了。您可能希望使用:

params[:admin][:invitations_attributes][:sender_id]
此外,您正在存储
sender\u id
,但是您没有任何东西可以告诉您的用户模型将
sender\u id
作为外键。默认情况下,它将查找
用户id
。您必须添加以下内容:

User: has_many :invitations, :foreign_key => 'sender_id'
以及:

Invitation: belongs_to :sender, :class_name => "User" # recommended
# or 
Invitation: belongs_to :user, :foreign_key => 'sender_id'

“用户id”应该来自当前用户吗?
发送者id
应该是
用户id
,即当前用户。谢谢。我知道我把协会搞砸了。发送者id不再为空,但它不使用用户id号。相反,它会自动递增
发送者\u id
以及
邀请\u id
。使用
params[:invitation]。合并!(:sender\u id=>current\u user.id)
在我的创建方法中出现错误“undefined method merge!”?