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!”?