2011-10-12 51 views
0

聯繫主控制器:不保存在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

回答

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

謝謝。我知道我搞砸了一些關聯。 sender_id不再爲空,但它沒有使用user_id號碼。相反,它會自動增加'sender_id'和'invitation_id'。在我的create方法中使用'params [:invitation] .merge!(:sender_id => current_user.id)'帶來了錯誤「undefined method merge!」? – noob