0
下面是創建RFQ控制器:如何RSPEC在加入記錄多到許多在軌3.1.0
def create
if has_create_right?
@rfq = Rfq.new(params[:rfq], :as => :roles_new)
#save into join table rfqs_standards
params[:rfq][:standard_ids].each do |sid|
@rfq.standards << Standard.find(sid.to_i) if !sid.nil?
end
if @rfq.save
redirect_to URI.escape("/view_handler?index=0&msg=RFQ saved!")
else
flash.now[:error] = "RFQ not saved!"
render 'new'
end
end
end
這裏是RSpec的代碼
describe "'create'" do
it "should be successful for corp head" do
session[:corp_head] = true
session[:user_id] = 1
s = Factory(:standard)
rfq = Factory.attributes_for(:rfq)
rfq.standards << s
get 'create', :rfq => rfq
response.should redirect_to URI.escape("/view_handler?index=0&msg=RFQ saved!")
end
end
的錯誤是:
1) RfqsController 'create' should be successful for corp head
Failure/Error: rfq.standards << s
NoMethodError:
undefined method `standards' for #<Hash:0x6741570>
# ./spec/controllers/rfqs_controller_spec.rb:65:in `block (3 levels) in <top (requi
什麼是測試連接記錄的正確方法?謝謝。
應用程序有沒有問題,保存到連接表時,一個新的RFQ被保存。現在的問題是如何rspec它。這裏是一篇關於如何保存到連接表的文章 - http://stackoverflow.com/questions/8736805/how-to-save-2-id-in-joint-table-for-many-to-many-relationship-在護欄-3-1。 – user938363 2012-01-18 16:42:11
同意,但我上面發佈的代碼不是如何保存模型,而是如何解決您的RSpec測試(我已更新,以使其更清楚)。關於嵌套屬性的評論只是對你如何實現保存加入模型的評論/建議。對於一個habtm關係來說,你是正確的,嵌套屬性不會起作用,但是你不清楚你是在談論你的OP中的一個壞習慣。 – PinnyM 2012-01-18 23:00:35
剛剛經過測試並失敗。錯誤是:失敗/錯誤:get'create',:rfq => rfq NoMethodError: 當你沒有想到它時,你有一個零對象!問題似乎是相同的,這是rfq(attributes_for)不是一個對象。在rails控制檯中,如果將rfq作爲對象進行創建,那麼將執行rfq.standards << s而不會出錯。創建代碼似乎可以創建一個新的rfq。但是rspec代碼失敗。現在確定rfq.new(params [:rfq])如何在控制器執行過程中被視爲rfq對象。不管怎麼說,還是要謝謝你。 – user938363 2012-01-19 03:48:07