我與Formtastic
面臨的問題屬性是,我有一個表格,以創建一個新的Order
。在這種形式下,我想從列表中選擇多個現有的Food
項目。這些應該被添加到我提交的新訂單中。同時我也想在FoodOrder
連接模型中設置屬性。此模型具有整數數量屬性,我希望在該表單中有一個字段。Rails的Formtastic嵌套形式 - 形式從加盟模式
什麼我基本上找的是,列出了所有食品和在同一行,因爲它屬於食品項目把一個場爲quantity
一種形式。
模型
class Order < ActiveRecord::Base
belongs_to :user
belongs_to :restaurant
has_many :food_orders
has_many :foods, :through => :food_orders
end
class FoodOrder < ActiveRecord::Base
belongs_to :food
belongs_to :order
end
class Food < ActiveRecord::Base
has_many :food_orders
has_many :orders, :through => :food_orders
belongs_to :category
end
這是迄今爲止我已經試過形式的版本之一。但我只是感到困惑,不知道如何爲FoodOrder模型獲取字段。
<%= semantic_form_for [@restaurant, @order] do |f| %>
<%= f.inputs do %>
<%= f.input :comment %><br />
<%= f.input :table_id %><br />
<%# <%= f.input :foods, :as => :check_boxes %>
<%= f.inputs :for => :foods do |food| %>
<%= food %>
<%= food.inputs :quantity %>
<% end %>
<% end %>
<%= f.buttons do %>
<%= f.commit_button %>
<% end %>
<% end %>
我的模型具有這些屬性
create_table "food_orders", :force => true do |t|
t.integer "quantity", :null => false
t.decimal "price", :null => false
t.integer "food_id", :null => false
t.integer "order_id", :null => false
t.text "comment"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "foods", :force => true do |t|
t.integer "category_id", :null => false
t.string "name", :null => false
t.string "description"
t.string "image"
t.decimal "default_price", :null => false
t.boolean "active", :default => true, :null => false
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "orders", :force => true do |t|
t.integer "restaurant_id", :null => false
t.integer "user_id", :null => false
t.integer "table_id", :null => false
t.decimal "total", :null => false
t.datetime "finished_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
謝謝您的回答!表格現在看起來不錯,就像我在找的那樣。不幸的是,我得到'不能修改凍結哈希'Rails運行時錯誤。不允許修改'FoodOrder'中的數量嗎?任何想法可能來自哪裏? – patrickdet 2012-01-08 11:32:17
嗯,它可能是在我要成爲我的電話了一天休息的方法摧毀,但你可以試試「mark_for_destruction」代替。但是,如果這樣做不起作用,那就完全消滅這個破壞,看看會發生什麼。 – Azolo 2012-01-08 11:50:40
感謝您的快速回復。 '.mark_for_destruction'也沒有評論它的工作。都導致'SQLite3 :: ConstraintException:約束失敗:INSERT INTO「food_orders」' – patrickdet 2012-01-08 12:05:32