3
我试图同时创建组,用户和成员关系(多对多关系)。人们可以在用户创建它时添加用户,然后我希望它可以通过所有成员路由到该组的视图。我可以创建用户并将当前用户的成员资格保存到数据库。不过,我努力为新创建的用户对象获取id以保存新的成员资格。在嵌套导轨上创建多对多关系
Group.rbclass Group < ActiveRecord::Base
has_many :memberships
has_many :users, :through => :memberships
has_many :users
accepts_nested_attributes_for :users, :reject_if => lambda { |a| a[:name].blank? or a[:number].blank? }
end
Membership.rb
class Membership < ActiveRecord::Base
belongs_to :groups
belongs_to :users
end
User.rb
class User < ActiveRecord::Base
has_many :memberships
has_many :groups, :through => :memberships
belongs_to :group
end
groups_controller.rb
class GroupsController < ApplicationController
def show
@group = Group.find(params[:id])
respond_to do |format|
format.html
end
end
def new
@group = Group.new
3.times { @group.users.build }
end
def create
@group = Group.new(params[:group])
@group.memberships.build(:user_id => current_user.id)
logger.info @group.users
@group.users.each do |x|
@group.memberships.build(:user_id => x.id)
end
respond_to do |format|
if @group.save
format.html { redirect_to(@group, :notice => 'Success!') }
else
format.html { render :action => "new" }
end
end
end
end
我的形式如下:
这是通过创建:
的意见/组/ new.html.rb
<h1>New group</h1>
<%= form_for(@group) do |form| %>
<fieldset>
<legend>Create a new group</legend>
<%= render 'shared/group_error_messages', :object => form.object %>
<div class="clearfix">
<%= form.label :group_name %>
<div class="input">
<%= form.text_field :group_name %>
</div>
</div>
<div id="users">
<div class="user">
<%= form.fields_for :users, :url => {:action => 'new', :controller => 'users', :registered => false}, do |user_form| %>
<%= render 'user', :user => user_form %>
<% end %>
</div>
</div>
</div>
<div class="actions">
<%= form.submit :value => 'Create your group', :class => 'btn success'%>
</div>
</fieldset>
<% end %>
的意见/组/ _user.html。 RB
<div class="clearfix">
<%= user.label :name %>
<div class="input">
<%= user.text_field :name %>
</div>
</div>
<div class="clearfix">
<%= user.label :number %>
<div class="input">
<%= user.text_field :number %>
</div>
</div>
<div class="clearfix" style="display:none">
<%= user.label :password %>
<div class="input">
<%= user.password_field :password, :value => newpass(6) %><!-- todo: fix this horrible hack -->
</div>
</div>
<div class="clearfix" style="display:none">
<%= user.label :registered %>
<div class="input">
<%= user.text_field :registered, :value => false %> <!-- todo: fix this horrible hack -->
</div>
</div>
<div class="clearfix" style="display:">
<%= user.label :id %>
<div class="input">
<%= user.text_field :id %> <!-- todo: fix this horrible hack -->
</div>
</div>
所以我的主要愿望是让此位Ø f代码在创建时查找用户ID,然后使用这些ID构建组和用户之间的成员资格。
感谢非常,非常提前多少:)
我得到的错误: '引发ArgumentError(未知的密钥(S):类): 应用程序/模型/ group.rb:26:在' 应用程序/模型/ group.rb:21:在' app/controllers/groups_controller.rb:24:in new'' –
try:class_name =>'User' – rtcoms
has_many:members,:class_name =>'User',:foreign_key =>: user_id – pduey