Rails Вложенная форма редактирования для самореферентного объекта активной записи HABTM - PullRequest
1 голос
/ 23 февраля 2010

ОК, это тупой. У меня есть объект ActiveRecord, который, помимо прочего, включает в себя отношения следующим образом:

class Sample < ActiveRecord::Base
  has_and_belongs_to_many :related_samples,
                          :class_name => "Sample",
                          :join_table => "related_samples",
                          :foreign_key => "sample_id"
                          :associated_foreign_key => "related_id"
end

А вот схема для него:

def self.up
  create_table :samples do |t|
    t.string :related_info
    t.string :name
    #There's other info, but it is not related to this problem
  end

  create_table :related_samples, :id => false do |t|
    t.references :sample
    t.references :related
    t.timestamps
  end
end

Это отлично работает. Когда я запрашиваю sample_object.related_samples, он дает мне любые другие объекты Sample, которые я ему назначил.

Проблема связана с действием редактирования для моих просмотров. Моя цель - позволить пользователю заменить существующий связанный объект Sample на другой, выбрав его из списка всех доступных образцов. И я хочу реализовать это (если возможно) внутри вспомогательного метода fields_for, чтобы обновление было действительно простым. Я не уверен, как это реализовать, или я даже могу. Является ли это возможным? И если да, то как?

1 Ответ

0 голосов
/ 23 февраля 2010

Я только что понял что-то чрезвычайно важное, что, вероятно, делает этот вопрос невозможным для решения. Когда я говорю, что хочу изменить объект Sample, с которым связан другой объект, я имею в виду ссылку на него. Пример:

Sample1.related_sites == [Sample2, Sample3]

Я хочу сделать что-то, чтобы я мог использовать Sample4 вместо другого сэмпла, чтобы он стал:

Sample1.related_sites == [Sample2, Sample4]

Но я хочу, чтобы Sample3 остался без изменений. Это означает, что ссылки должны быть изменены, и я не вижу способа сделать это проще, чем модифицировать схему базы данных. Так что, если у вас все еще есть идея, я бы хотел ее услышать, но я, вероятно, буду что-то менять Спасибо, ТАК сообщество!

...