我有一个用于与Assignments模型绑定的用户和组模型。用户拥有多个组和一组has_many用户。但是,当我创建一个新组时,当我Group.last.users.count
输出为0或ActiveRecord :: Associations :: CollectionProxy []时。我是否需要更改simple_form的一个方面?我没有正确构建中间人模型来绑定用户和组吗?我希望这样当用户创建一个组时,group_ids在执行User.last.groups
等时就在数组中。当我将它作为用户has_many组和一个group belongs_to用户时,组ID将绑定到一个用户。但是,既然为两个模型切换到has_many并引入了Assignments模型,那就不再是这种情况了。
群组模型
class Group < ActiveRecord::Base
validates :user_id, presence: true
has_many :assignments
has_many :users, through: :assignments
has_many :posts
has_many :attachments
has_secure_token
end
用户模型
class User < ActiveRecord::Base
...
has_many :assignments
has_many :groups, through: :assignments
accepts_nested_attributes_for :assignments
...
作业模式
class Assignment < ActiveRecord::Base
belongs_to :group
belongs_to :user
accepts_nested_attributes_for :group
accepts_nested_attributes_for :user
end
群组控制器
class GroupsController < ApplicationController
before_action :authenticate_user!
def new
@group = current_user.groups.build
end
def create
@group = current_user.groups.build(group_params)
@group.user_id = current_user.id
if @group.save
redirect_to groups_path
else
render :new
end
end
private
def group_params
params.require(:group).permit(:group_name, :description, :user_id)
end
end
分组new.html.erb
<%= simple_form_for @group do |f| %>
<%= f.input :group_name %>
<%= f.text_area :description %>
<%= f.button :submit %>
<% end %>
答案 0 :(得分:2)
你可以这样做:
我想build
方法似乎没有保存您可以使用new
的joiner模型。有一个问题here:
由于Group
和User
之间存在多对多关系。因此,组中不需要user_id
。因此验证是不必要的。它导致了我的第一种方法的问题。在模型评论中验证。 # validates :user_id, presence: true
def create
@group = current_user.groups.new(group_params)
# @group.user_id = current_user.id // this line is unnecessary
if @group.save
redirect_to groups_path
else
render :new
end
end
或者,(我不会建议它,因为它不是一个好方法)
def create
@group = Group.new(group_params)
if @group.save
current_user.groups << @group
redirect_to groups_path
else
render :new
end
end