Ruby on rails 通过从强参数传递关系id来创建模型
我正在用Rails 4构建一个API。存在相关的组织和用户模型。(下文) 现在,我想从如下参数创建新用户 POST/users参数:Ruby on rails 通过从强参数传递关系id来创建模型,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我正在用Rails 4构建一个API。存在相关的组织和用户模型。(下文) 现在,我想从如下参数创建新用户 POST/users参数: { "name": "Rails", "org_id": 1 // existing Org.id, Org.name == 'Ruby' } 答案应该是这样的: { "name": "Rails", "org": { "name": "Ruby" } } 我想将org\u id传递给User.create,以便将新用户与现有组织关
{
"name": "Rails",
"org_id": 1 // existing Org.id, Org.name == 'Ruby'
}
答案应该是这样的:
{
"name": "Rails",
"org": {
"name": "Ruby"
}
}
我想将org\u id
传递给User.create
,以便将新用户与现有组织关联起来。如何有效地使用强参数
代码 models/org.rb
class Org < ActiveRecord::Base
has_many :users
end
classorg
models/user.rb
class User < ActiveRecord::Base
belongs_to :org
validates :org_id, presence: true
validates :name, presence: true
end
class用户
控制器/用户\u 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
class API::UsersController
更改app/models/user.rb:
在这里,在org\u attributes
中传递id
将更新user
的现有记录,当您执行以下操作时:
@user = User.create! user_params
在控制器内部,方法用户参数
:
private
def user_params
params.permit(:name, org_attributes:[:id, :name])
end
现在,
@user=user.create!用户参数
只有在传递id
内部org\u属性
参数时,才应使用现有的org
创建用户。谢谢!帮了大忙。快速问题:我可以更改组织属性的关键字名称吗?
?我也不想创建新组织。如果组织不存在,我是否可以引发错误?当然,您可以引发异常。但是您不能更改org\u属性,正如Rails所期望的那样。
@user = User.create! user_params
private
def user_params
params.permit(:name, org_attributes:[:id, :name])
end