私はRuby on Railsでの作業方法を学習しており、私の問題を解決する最良の方法を探したいと思っています。私は多くのフォーラムやRailsのドキュメントを検索しましたが、まだ解決策を理解できていないので、誰かが助けてくれることを期待しています!Rails 5 Active Record Associations
私のアプリには3つのコントローラ、つまりuser_addressesと請求書があります。各ユーザは、複数のuser_addressを持つことができ、複数の請求書を持つこともできます。 user_id列をuser_addresses表の主キーとして、user_id列とaddress_id列を主キーとして請求書表に追加しました。
請求書を作成して割り当てるアドレスを選択して保存すると、user_idとaddress_idの両方を入力する方法がわかりません。どちらか一方しか保存できません。下の私の例では、user_idを保存するようになっていますが、user_idとidの両方を取得して請求書に保存するにはどうすればよいかわかりません。
has_many:user_addressesとhas_many:請求書を使用してユーザーモデルを設定しました。私のInvoiceとUserAddressモデルの両方がbelongs_to:userというモデルです。私が読んだことから、私は延長を利用する必要があるかもしれないと思うが、失われて何をすべきか分からない。どんな助けや指導も大歓迎です!
請求書フォーム
<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