我正在使用Rails构建API 4.有与之相关的组织和用户模型。 (下同)
现在,我想从这样的参数中创建新用户。
POST / users参数:
{
"name": "Rails",
"org_id": 1 // existing Org.id, Org.name == 'Ruby'
}
并且响应应该是这样的:
{
"name": "Rails",
"org": {
"name": "Ruby"
}
}
我想将org_id
传递给User.create
,以便将新用户与现有组织相关联。如何有效地使用强参数?
模型/ org.rb
class Org < ActiveRecord::Base
has_many :users
end
模型/ user.rb
class User < ActiveRecord::Base
belongs_to :org
validates :org_id, presence: true
validates :name, presence: true
end
控制器/ users_controller.rb
class API::UsersController < API::ApplicationController
def create
@user = User.create! create_params # can I do this?
end
private
def create_params
params.permit(:name, :org_id)
end
end
答案 0 :(得分:2)
更改 app / models / user.rb :
class User < ActiveRecord::Base
belongs_to :org
validates :org_id, presence: true
validates :name, presence: true
accepts_nested_attributes_for :org
end
现在,你的参数应该是:
params = { "name" => "User name here!", "org_attributes" => { "id"=> "1", "name" => "Ruby" } }
此处,在id
中传递org_attributes
会更新user
的现有记录,当您这样做时:
@user = User.create! user_params
在您的控制器中,方法user_params
:
private
def user_params
params.permit(:name, org_attributes:[:id, :name])
end
现在,@user = User.create! user_params
只有在org
参数内传递id
时才应创建一个包含现有org_attributes
的用户。