Ruby on rails 通过从强参数传递关系id来创建模型

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,以便将新用户与现有组织关

我正在用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
,以便将新用户与现有组织关联起来。如何有效地使用强参数


代码 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