不保存在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_at
和sent_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
这样做,但是听说它不安全,所以我不想这样做。
用途:
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'
谢谢。我知道我搞砸了一些关联。 sender_id不再为空,但它没有使用user_id号码。相反,它会自动增加'sender_id'和'invitation_id'。在我的create方法中使用'params [:invitation] .merge!(:sender_id => current_user.id)'带来了错误“undefined method merge!”? – noob
如若 “USER_ID” 来自当前用户? –
'sender_id'应该是'user_id',它是当前用户。 – noob