来自前端的铁轨协会

时间:2010-08-01 12:40:18

标签: ruby-on-rails activerecord

我有一个UserGroup型号。 User has_many GroupsGroup belongs_to User

我已经在用户表中有条目:

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

想象一下,如果身份1 (testuser)的用户已登录,并且我想在该用户内创建群组。

当我从Group Controller中的新操作创建一个新组时,DB中的条目如下所示:

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

如您所见,user_id,column始终为空白,因此关联不存在。

我需要做些什么才能建立这种关联?

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>

我是rails的新手,请告诉我如何与用户建立联系。从控制台我可以通过为这样的用户添加组来建立关联:

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

但我不知道如何从前端完成这项工作。

2 个答案:

答案 0 :(得分: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

你可能想在你的else子句中添加一个flash [:error],否则会让用户感到困惑,无法解释新的动作。

答案 1 :(得分: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?,但听起来创建群组的唯一人就是当前用户。