让我先说一下 - 我很喜欢ruby on rails,因为这里有很多用户。所以不要向我扔石头,请:) 我正在尝试在Ruby上为我的Android应用程序创建一个API应用程序。这就是我遇到的问题:
user.rb模型
class User < ApplicationRecord
belongs_to :group
has_many :tasks
has_secure_password
end
这是 group.rb模型:
class Group < ApplicationRecord
has_many :users, dependent: :destroy
end
UserController.rb
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@group = Group.find(params.require(:user).permit(:group))
@user = User.new(user_params)
@group.users.create(@user)
@group.users.save
# @user.save!
render json: @user
end
private
def user_params
params.require(:user).permit(:name, :email, :password)
end
end
我想创建一个新用户。
我已经尝试使用@user.create(user_params)
创建用户,但它说,该群组不存在,所以现在我尝试通过@group.users.create
执行此操作但异常ActiveRecord::RecordNotFound in UsersController#create
不停地说,它说找不到具有id={"id"=>1020};
我要展示的最后一件事是我发送的JSON:
{
"group": {
"id":1020
},
"user": {
"name": "volkeee",
"email": "test@gmail.com",
"password": "123",
"repeat_password": "123"
}
}
答案 0 :(得分:0)
更改您的创建方法,如下所示
def create
@group = Group.find_or_create_by(params[:group][:id]) do | group |
group.assign_attributes(group_params)
end
@user = @group.users.create(user_params)
render json: @user
end
创建隐私方法
def group_params
params.require(:group).permit(:id, :name, :has_subgroups, :created_at, :updated_at)
end
注意:用户表应具有group_id列
答案 1 :(得分:0)
Firstly create a new private method for group params like
def group_params
params.require(:group).permit(:id)
end
replace
@group = Group.find(params.require(:user).permit(:group))
with
@group_params = group_params
@group = Group.find(@group_params[:id])
I'm not in front of a PC so cant actually test. But this should work. Let me know if this doesn't.
A better approach
Replace
@user = User.new(user_params)
@group.users.create(@user)
@group.users.save
with
@user = @group.users.new(user_params)
@user.save
This is a much cleaner and rails way