【发布时间】:2016-11-17 18:56:46
【问题描述】:
我正在学习如何使用 Ruby on Rails,并希望找到解决问题的最佳方法。我已经搜索了很多论坛和 Rails 文档,但还没有能够理解解决方案,所以希望有人能够提供帮助!
我的应用有 3 个控制器——用户、用户地址和发票。每个用户可以有多个 user_addresses,也可以有多个发票。我添加了一个 user_id 列作为我的 user_addresses 表的主键,并添加了一个 user_id 和 address_id 列作为我的 invoices 表的主键。
当我创建一张发票并选择一个地址来分配它,然后保存它时,我不知道如何填充 user_id 和 address_id,我只能获取一个或另一个来保存。在下面的示例中,我正在获取要保存的 user_id,但不确定如何从地址中获取 user_id 和 id 以保存到发票中。
我的用户模型设置为 has_many :user_addresses 和 has_many :invoices。我的 Invoice 和 UserAddress 模型都属于_to :user。根据我的阅读,我认为我可能需要使用 :through 扩展,但我迷路了,不知道该怎么做。任何帮助或指导将不胜感激!
发票表格
<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
结束
【问题讨论】:
-
“我只能保存其中一个”是什么意思?即什么程序的什么输入导致什么行为(错误和/或输出)?另请显示所有相关代码并阅读minimal reproducible examples。 PS 请参阅我在答案开头添加的编辑。
标签: relational-database rails-activerecord foreign-key-relationship ruby-on-rails-5