2010-08-01 85 views
0

我有一個UserGroup模型。 Userhas_manyGroupsGroupbelongs_toUser協會從前端導軌

我已經在user表條目:

id name 
-------------- 
1  testuser 
2  someotheruser 

試想一下,如果id爲1 (testuser)的用戶登錄,我想創建一個用戶羣裏面。

當我創建的組控制器的新的行動在數據庫中的條目會喜歡這個新組:

id groupname user_id 
    ------------------------ 
    1 groupA 
    2 groupB 

正如你看到的,USER_ID,列始終在爲空白會這麼的關聯不在那裏。

我需要做些什麼來使這種關聯?爲GroupsController

代碼:

def new 
    @group = Group.new 
    end 

    def create 
    @group = Group.new(params[:group]) 
    if @group.save 
     flash[:notice] = "Successfully created group." 
     redirect_to groups_url 
    else 
     render :action => 'new' 
    end 
    end 

代碼views/groups/new.html.erb

<% title "New Group" %> 

<% form_for @group do |f| %> 
    <%= f.error_messages %> 
    <p> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    </p> 
    <p> 
    <%= f.label :description %><br /> 
    <%= f.text_field :description %> 
    </p> 
    <p><%= f.submit %></p> 
<% end %> 


<p><%= link_to "Back to List", groups_path %></p> 

我新的軌道,請告訴我如何使與用戶相關聯。從控制檯我可以通過添加組對於這樣的用戶,使聯想:

@u = User.find(1) 
@u.groups.create(:groupname=>"groupA") 
@u.save 

,但我不知道如何從前端完成這件事。

回答

0

首先你要確保一組不能沒有用戶保存:

/app/models/group.rb

class Group 
    belongs_to :user 
    validates_presence_of :user 
end 

然後,讓默認情況下,組成爲當前用戶。

/app/controllers/groups_controller.rb

def create 
    @group = Group.new(params[:group]) 
    @group.user = current.user 
    if @group.save 
    ... 
    else 
    ... 
    end 
end 

你也可以做一個@group.user = current_user if @group.user.nil?,但它聽起來像創建組將當前用戶的唯一的人。

+0

謝謝我會試試這個。我將嘗試使用user_id傳遞隱藏字段的方法,但這會更好 – Patrick 2010-08-01 13:40:02

0

你需要確保你的用戶ID是傳遞給Group.new,也許這樣的事情則params的一部分:

def create 
    @group = Group.new(params[:group].merge!({:user_id => current_user})) 
    if @group.save 
    flash[:notice] = "Successfully created group." 
    redirect_to groups_url 
    else 
    render :action => 'new' 
    end 
end 

您可能需要添加Flash:你else子句中的[錯誤]另外,如果用戶沒有解釋就最終結束新的動作,這會讓人感到困惑。