我是rails的新手,我正在尝试使用Rails 5开发一个基于API的应用程序,在我的一个控制器上我有一个功能来过滤允许参数,如此
def provider_params
params.require(:provider).permit(:name, :phone, :email, :website, :address, :provider_id, :bio, :specialty_ids => [])
end
然后从Paw发帖我注意到不是表格属性的参数不包含在 provider_params 中,我应该接收的参数是一个数组,由HABTM定义关系。
这就是我的模型的样子
specialty.rb
class Specialty < ApplicationRecord
has_and_belongs_to_many :providers
end
provider.rb
class Provider < ApplicationRecord
has_and_belongs_to_many :specialties
end
这就是通过迁移创建联接表的方式
class CreateProvidersSpecialties < ActiveRecord::Migration[5.0]
def change
create_table :providers_specialties, :id => false do |t|
t.integer :provider_id
t.integer :specialty_id
end
add_index :providers_specialties, :provider_id
add_index :providers_specialties, :specialty_id
end
end
我发布的JSON
{
"name": "the name",
"specialty_ids": [
1,
2
]
}
正如我所提到的,数组 specialty_ids 似乎没有通过,即使它确实如此,我怀疑还有一些我需要做的事情才能让rails插入 ProvidersSpecialties 表中 special_ids 的内容
答案 0 :(得分:0)
所以问题最终是通过从方法requir
中移除provider_params
调用来解决的,因为我没有将json-payload
包裹在provider
密钥中。显然,一旦你添加了require(:key)
调用,你就只能添加属于模型的参数,这很奇怪,因为当密钥不存在时应该引发错误,我的有效负载是什么情况,缺乏provider
密钥。