我有一个User
和Group
型号。 User
has_many
Groups
和Group
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
但我不知道如何从前端完成这项工作。
答案 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?
,但听起来创建群组的唯一人就是当前用户。