0
我正在編寫一個簡單的連接到傳統SQL Server數據庫的Rails API。我正在測試我的聯繫人控制器的REST操作。當使用FactoryGirl創建測試對象時,我遇到了標題中提到的錯誤消息。我的索引和顯示操作正常,但創建操作拋出此錯誤。我contacts_controller的相關部分是這樣的:「89718」的未定義方法「許可」:字符串
def create
contact = Contact.new(contact_params)
if contact.save
render json: contact, status: 201, location: [:api, contact]
else
render json: { errors: contact.errors }, status: 422
end
end
...
private
def contact_params
params.require(:contact).permit(:name, :address_1, :city, :zip_code_5, :country)
end
這裏是相關的測試代碼:
describe "POST #create" do
context "when is successfully created" do
before(:each) do
@user = FactoryGirl.create :user
@contact = FactoryGirl.create :contact
post :create, { contact: @contact }
end
it "renders the json representation for the contact record just created" do
contact_response = json_response
expect(contact_response[:name]).to eq @contact_attributes[:name]
end
it { should respond_with 201 }
end
end
型號:
class Contact < ActiveRecord::Base
belongs_to :user
validates :name, :address_1, :city, :zip_code_5, :country, :createddate, presence: true
end
串行器(使用active_model_serializer寶石) :
class ContactSerializer < ActiveModel::Serializer
belongs_to :user
attributes :id, :name, :address_1, :city, :zip_code_5, :country
end
件
事情我已經嘗試過包括:
- 更改「belongs_to的」到「HAS_ONE」在串行器(沒有變化)
- 刪除從permite的「zip_code_5」 ......需要對線路(奇怪的是,我仍然有這個屬性的錯誤消息,也許是因爲串行?)
- 卸下串行器(沒有變化)
有什麼想法嗎?我很樂意提供更多必要的信息。
編輯
當它傳遞到創建行動的@contact的價值:
#<Contact id: 89815, user_id: "d67b0d57-8f7f-4854-95b5-f07105741fa8", title: nil, firstname: nil, lastname: nil, name: "Alene Stark", company: nil, address_1: "72885 Bauch Island", address_2: nil, address_3: nil, city: "Joestad", state: nil, zip_code_5: "98117", zip_code_4: nil, country: "MF", status_id: 1, createddate: "2015-10-23 07:00:00", lastmodifieddate: "2012-11-29 08:00:00", errorreasonid: nil, computergenerated: true, sandbox: true, emailsubject: nil, jobtitle: nil, mergevar1: nil, mergevar2: nil, mergevar3: nil, mergevar4: nil, mergevar5: nil, mergevar6: nil, mergevar7: nil, mergevar8: nil, mergevar9: nil, mergevar10: nil, clientid: 1, isshared: true>
則params的值:聯繫人]在運行時:
{"city"=>"Seattle", "state"=>"WA", "zip_code_5"=>"98117", "country"=>"US"}
我也有我的包裝參數設置爲:json格式,如果這是相關的。
由於某種原因,控制器中的'params [:contact]'是一個字符串。你可以檢查你傳遞給你的@ @ contact的值嗎?也可以在運行時檢查'params [:contact]'的值,並顯示它是什麼? –