В моем приложении настроены отношения со ссылками на себя, так что AppForm
может belong_to
другой AppForm
- Variations
.
Поведение, которое я пытаюсь создать, - это кнопка на странице AppForm
show
, по которой можно щелкнуть, чтобы создать новый вариант AppForm
. Эта кнопка в идеале создаст дубликат текущей записи и перенаправит пользователя на страницу edit
этой новой записи, чтобы внести изменения перед ее сохранением.
У меня таблица variations
настроена таким образом, как в моем schema.rb
:
create_table "variations", force: :cascade do |t|
t.bigint "app_form_id"
t.bigint "original_app_form_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.bigint "user_id"
t.index ["app_form_id", "original_app_form_id"], name: "index_variations_on_app_form_id_and_original_app_form_id", unique: true
t.index ["app_form_id"], name: "index_variations_on_app_form_id"
t.index ["original_app_form_id"], name: "index_variations_on_original_app_form_id"
t.index ["user_id"], name: "index_variations_on_user_id"
end
С этим, как моя variation.rb
модель:
class Variation < ApplicationRecord
belongs_to :user
belongs_to :app_form
belongs_to :original_app_form, class_name: "AppForm"
end
И это в моей app_form.rb
модели:
class AppForm < ApplicationRecord
belongs_to :application_status, optional: true
belongs_to :final_decision, optional: true
belongs_to :funding_status, optional: true
belongs_to :user, optional: true
belongs_to :app_form, through: :variations
end
Это кажется довольно стандартно для has_many :through
отношений, но теперь я не могу показаться Google своим способом создания дублированного варианта AppForm
. Я видел такие посты, как , этот , которые показывают различные способы сделать это. Некоторые используют маршруты, другим нужны специальные драгоценные камни ... Я заблудился. Что такое Rails-y, чтобы сделать это правильно?