Rails Newby:Rails 5中的强参数不允许指定参数Through - HABTM

时间:2016-08-18 02:17:27

标签: has-and-belongs-to-many strong-parameters ruby-on-rails-5

我是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 的内容

1 个答案:

答案 0 :(得分:0)

所以问题最终是通过从方法requir中移除provider_params调用来解决的,因为我没有将json-payload包裹在provider密钥中。显然,一旦你添加了require(:key)调用,你就只能添加属于模型的参数,这很奇怪,因为当密钥不存在时应该引发错误,我的有效负载是什么情况,缺乏provider密钥。