gpt4 book ai didi

ruby-on-rails - 在嵌套的 Rails 表单上创建多对多关系

转载 作者:数据小太阳 更新时间:2023-10-29 07:30:57 24 4
gpt4 key购买 nike

我正在尝试同时创建组、用户和成员资格(多对多关系)。人们可以在创建群组时将用户添加到群组中,然后我希望它可以路由到包含所有成员的群组 View 。我可以让要创建的用户和当前用户的成员资格保存到数据库中。但是,我正在努力获取新创建的用户对象的 ID 以保存新成员资格。

组.rb

class 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

成员(member).rb

class Membership < ActiveRecord::Base
belongs_to :groups
belongs_to :users
end

用户.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

我的表单如下所示:

The form creator

创建者:

views/groups/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 %>

views/groups/_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>

所以我的主要愿望是获取这段代码以在创建用户 ID 时找到它们,然后使用这些 ID 在组和用户之间建立成员资格。

提前非常感谢非常非常 :)

最佳答案

我觉得

has_many :users, :through => :memberships
has_many :users

是错误的,你不能有两个或更多同名关联。

尝试去做

has_many :users, :through => :memberships
has_many :members, :class_name => 'User', :foreign_key => :user_id

并对 View 和 Controller 进行相应的更改。喜欢

form.fields_for : members

关于ruby-on-rails - 在嵌套的 Rails 表单上创建多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7266952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com