我正在學習如何使用Ruby on Rails,並希望找到解決問題的最佳方法。我已經搜遍了很多論壇和Rails文檔,但尚未能夠理解解決方案,所以希望有人能夠幫助!Rails 5活動記錄協會
我的應用程序有3個控制器 - 用戶,user_addresses和發票。每個用戶可以有多個user_addresses,也可以有多個發票。我在我的發票表中添加了一個user_id列作爲我的user_addresses表的主鍵和一個user_id和address_id列作爲主鍵。
當我創建一個發票並選擇一個地址分配給它,然後保存它,我想不出如何填充user_id和address_id,我只能得到一個或另一個來保存。在我下面的例子中,我得到了user_id來保存,但不知道如何從地址中獲取user_id和id以保存到發票。
我用has_many:user_addresses和has_many:invoices設置了我的用戶模型。我的發票和用戶地址模型belongs_to:用戶。從我讀過的內容來看,我想我可能需要使用一個:擴展名,但我迷路了,不知道該怎麼做。任何幫助或指導將不勝感激!
發票表格
<div class="form-group">
<%= label_tag(:user_id, "Customer") %>
<%= f.select(:user_id, @addresses.map {|a| [a.user.first_name + ' ' + a.user.last_name + ' - ' + a.street_1, a.user.id]},{}, {:class => 'form-control'}) %>
</div>
<div class="form-check">
<label class="form-check-label">
<%= f.check_box(:status, :class => 'form-check-input') %>
Status
</label>
</div>
<div class="form-group">
<%= label_tag(:service_date, "Service Date") %>
<%= f.text_field(:service_date, 'data-provide' => 'datepicker', :class => 'form-control') %>
</div>
<div class="form-group">
<%= label_tag(:service_type, "Service Type") %>
<%= f.select(:service_type, ["General Pest", "Weed Control", "Specialty Pest", "Rodent"],{}, {:class => 'form-control'}) %>
</div>
<div class="form-group">
<%= label_tag(:service_charge, "Service Charge") %>
<%= f.text_field(:service_charge, :class => 'form-control') %>
</div>
發票控制器
def new
@invoice = Invoice.new
@addresses = UserAddress.all
end
表發票
create_table "invoices", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1" do |t|
t.integer "user_id"
t.integer "address_id"
t.boolean "status", default: false
t.string "service_date"
t.string "service_type"
t.string "service_areas"
t.string "service_materials"
t.string "service_charge"
t.string "service_info"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["address_id"], name: "index_invoices_on_address_id", using: :btree
t.index ["user_id"], name: "index_invoices_on_user_id", using: :btree
端
「我只能得到一個或另一個保存」是什麼意思?即什麼程序導致哪些行爲(錯誤和/或輸出)的輸入?還請顯示所有相關的代碼和*閱讀[mcve] s *。 PS請參閱我在答案開始處添加的修改。 – philipxy