不保存在USER_ID嵌套属性连接表

问题描述:

联系主控制器:不保存在USER_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 

邀请型号

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_atsent_at领域。 但是,它不保存user_id(user_admin连接表)和sender_id(邀请表)。

我尝试添加不同的排列到管理控制器,但没有任何工作。

东西不起作用:

params[:invitation][:sender_id] = current_user.id 

这给了我,我有一个nil对象时,我没想到它的错误。

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

如若 “USER_ID” 来自当前用户? –

+0

'sender_id'应该是'user_id',它是当前用户。 – noob

用途:

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' 
+0

谢谢。我知道我搞砸了一些关联。 sender_id不再为空,但它没有使用user_id号码。相反,它会自动增加'sender_id'和'invitation_id'。在我的create方法中使用'params [:invitation] .merge!(:sender_id => current_user.id)'带来了错误“undefined method merge!”? – noob