2010-08-01 60 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子句中的[错误]另外,如果用户没有解释就最终结束新的动作,这会让人感到困惑。