Я учусь работать с Ruby on Rails и хочу найти лучший способ решить мою проблему. Я просмотрел многие форумы и документацию Rails, но пока не смог понять решение, поэтому надеюсь, что кто-то сможет помочь!Rails 5 Active Record Association
В моем приложении есть 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: счета-фактуры. и моя модель счета-фактуры и UserAddress принадлежит_ пользователю:. Из того, что я прочитал, я думаю, мне, возможно, придется использовать расширение: через расширение, но я потерян и не уверен, что делать. Любая помощь или руководство будут очень благодарны!
счетов-фактур форма
<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