對不起,如果這個問題看起來很簡單,我對Rails(幾天前剛剛開始學習)非常陌生,但在諮詢Google和「使用Rails進行敏捷Web開發」之後,我找不到答案。Rails外鍵問題
我在使用Rails 2.3.8在兩個模型上創建外鍵時遇到了問題。我的表格看起來像這樣:
cars manufacturer
---- ------------
car_make name
car_model country
car_class logo_url
image_url (and default 'id' created by Rails)
manufacturer_id
(and default 'id' created by Rails)
我'car_make'和'name'字段基本相同;每一輛我創造的汽車,我都希望能夠將它與現有的製造商聯繫起來。這是我嘗試創建FK的列。
我的car.rb有'belongs_to:製造商',而我的manufacturer.rb有'has_many:汽車'來建立一個製造商與很多汽車的關係。但是,當我創建一輛新車時(通過腳手架),manufacturer_id字段爲空。
我去了我cars_controller,發現正在使用的「創造」的方法,並嘗試添加下面第二行:
@car = Car.new(params[:car])
@car.manufacturer_id = car.manufacturer.id # <===
這將產生一個「NameError在CarsController#創建」錯誤,並我看到:
undefined local variable or method 'car' for #<CarsController:0x1034642f0>
Rails似乎不喜歡我添加的行。我錯過了什麼來完成這項工作?
啊,這是有道理的。我想找到與car_make字段對應的正確manufacturer_id。例如,如果我的製造商表格在名稱列下填充了'Acura','Honda'和'Toyota',我創建了一輛car_make'Honda'的新車,我想找到正確的manufacturer_id '本田'排。 – Anon 2010-09-17 20:25:20
啊哈,所以你不應該那樣做。汽車製造應通過'car.manufacturer.name'找到,而不是在汽車上重複! – rfunduk 2010-09-17 20:32:07
爲了破解它,它可以工作(*壞想法*),你可以嘗試:'@ car.manufacturer = Manufacturer.find_by_name(@ car.car_make); @ car.save',它會嘗試通過你剛剛更新的汽車的car_make字段找到製造商......如果你沿着這條路走得太遠,那麼會有一段糟糕的時間:) – rfunduk 2010-09-17 20:33:35