Я задал этот вопрос по-другому, но удалил его, чтобы сделать более ясностью.Rails has_many: сквозной с уникальностью
У меня есть модель статьи. Он имеет несколько контактов, через:: article_contacts.
У меня есть контактная модель. Это has_many статьи, через:: article_contacts.
Мне нужен каждый контактный объект, чтобы быть уникальным, но быть в состоянии быть связанным с разными статьями. Мой последний вопрос привел к тому, что люди показывали мне, как показывать только уникальные контакты, или проверять модель соединения, но это не то, что мне нужно.
мне нужно, например, таблицы, как следующее:
Article
id: 1, name: "Whatever", content: "Whatever"
id: 2, name: "Again, whatever", content: "Whateva"
Contact
id: 1, email: "[email protected]"
id: 2, email: "seconde[email protected]"
ArticleContact
id: 1, article_id: 1, contact_id: 1
id: 2, article_id: 1, contact_id: 2
id: 3, article_id: 2, contact_id: 1
Итак, когда я строй ассоциации в моем контроллере статьи в новом действии, и я призываю @ article.save в создании действий, я получить вставку новой статьи, вставить контакт и вставить статью_relationship. Отлично.
НО, в статье 2, если я добавлю то же письмо в контактную форму, я не хочу создавать другой Контакт с тем же письмом. Но я хочу (как вы видите, с третьим ID в ArticleContact выше) для создания. Но каждый вызов @ article.save делает это. Я попытался first_or_initialize и < < в коллекцию, но он всегда создает несколько раз, и если у меня есть проверка, это означает, что я не могу создать отношения ArticleContact, потому что контакт уникален.
В конечном итоге у меня может быть папка с контактами, но я подозреваю, что она будет длинной, поэтому я бы просто просто ввел электронное письмо в форму и проверил код, что он уникален, и если да, просто создайте соединение с использованием существующего идентификатора.
Это должно быть легче, чем я понимаю, но я не могу найти ни одной статьи, которая демонстрирует это где угодно.
Обновлено с кодом за запрос, однако, опять же, у меня нет кода, который только создаст уникальный контакт и свяжет отношения с существующим. Вот что мне не хватает, поэтому этот код покажет только то, что я уже знаю, а не как добраться до того, что я хочу :).
ArticleController:
def new
@article = @business.articles.build
authorize @business
@article.attachments.build
@article.contacts.build
end
def create
@article = @business.articles.new(article_params)
authorize @business
respond_to do |format|
if @article.save
format.html { redirect_to business_article_path(@business, @article), notice: "Knowledge created." }
else
format.html { render 'new' }
end
end
end
Модель имеет стандартный has_many: thruogh и принадлежит. Я могу показать это, но они верный путь. Просмотр только стандартный simple_form здание контакт:
<%= f.simple_fields_for :contacts, class: "form-inline" do |contact| %>
<%= contact.input :first_name, label: "Contact First Name" %>
<%= contact.input :last_name, label: "Contact Last Name" %>
<%= contact.input :email, label: "Contact Email" %>
<% end %>
Добавив контроллеров, моделей и код просмотра поможет диагностировать проблему. – Dharam
Я могу, но это очень котельная плита. Я подозреваю, что код, который у меня есть, делает именно то, что он должен, т. Е. Строить связь и сохранять, сохранять контакт и ассоциацию. Мне нужно, чтобы он был более сложным и не знал, как, но я поставлю там плиту котла :). – Art
Как вы назначаете «контакт» в 'article' в' article_controller'? – Dharam