管理主控制器:
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
邀请模式
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_at
和sent_at
等字段的字段。 但是,它不会保存user_id
(user_admin连接表)和sender_id
(邀请表)。
我尝试向管理控制器添加不同的排列,但没有任何效果。
不起作用的事情:
params[:invitation][:sender_id] = current_user.id
这给了我一个零对象,当我没想到它出错时。
params[:invitation].merge!(:sender_id = current_user.id)
这给我一个“错误的语法错误”
@admin.invitations.build(params[:invitation][:sender_id]) = current_user.id
这给了我意想不到的“=”和“期待关键字结束”错误
我也试过了一堆其他不同的排列。我的协会有问题吗?如何更新邀请表中的sender_id
和富连接user_admin_relationship表中的user_id
?我知道我可以通过hidden_field
来做,但听说它不安全所以我不想这样做。
答案 0 :(得分:1)
使用:
params[:invitation].merge!(:sender_id => current_user.id)
注意=>
,而您只有=
。但是,在您的create
操作中,您要将其添加到params[:invitation]
,但之后您无法将其保存在任何位置,因此它只是迷路了。您可能想要使用:
params[:admin][:invitations_attributes][:sender_id]
此外,您正在存储sender_id
,但您没有任何要告诉您的用户模型查找sender_id
作为外键的内容。默认情况下,它会查找user_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'