Как управлять формой модели с двумя внешними ключами - PullRequest
0 голосов
/ 27 февраля 2011

В основном у меня есть две модели: Пользователь и Крестный отец. Таблица крестного отца имеет три столбца:

  • user_id (FK -> User)
  • user_godfather_id (FK -> Пользователь)
  • описание (текст)

Внутри каждого модельного класса я добавляю следующие ассоциации:

class User < ActiveRecord::Base

  has_many :godfathers # for user_id
  has_many :other_godfathers, :foreign_key => "user_godfather_id", :class_name => "Godfather"

  accepts_nested_attributes_for :godfathers
end

class Godfather < ActiveRecord::Base
   belongs_to :user
   belongs_to :user_godfather, :class_name => "User"
end

Теперь мой вопрос о том, как управлять формой редактирования этих вложенных отношений атрибутов. Вот как выглядит моя форма в данный момент (используя гем nested_form_for):

 <%= nested_form_for @user do |f| %>
            <%= f.fields_for :godfathers do |godfather_form| %>
                # Here I have an ID text field but what I want instead is
                # to provide a username for this godfather.
                <%= godfather_form.label :user_godfather_id %>
                <%= godfather_form.text_field :user_godfather_id %>

                <%= godfather_form.label :description %>
                <%= godfather_form.text_field :description %>

                <%= godfather_form.link_to_remove "Remove this godfather" %>
             <% end %>
            <%= f.link_to_add "Add a godfather", :godfathers %> <br/><br/>
 <%= f.submit "Update Godfathers" %>

Итак, как я сказал в комментариях, моя цель - предоставить имя крестного отца вместо идентификатора. Кстати, это имя пользователя является столбцом в таблице User.

Есть идеи о том, как мне это сделать?

Спасибо!

1 Ответ

1 голос
/ 27 февраля 2011

Просто используйте разные имена для отношений

class User < ActiveRecord::Base

  has_many :godfathers # for user_id
  has_many :some_other_godfathers, :foreign_key => "user_godfather_id", :class_name => "Godfather"

  accepts_nested_attributes_for :godfathers
end

Теперь вы можете использовать крестных отцов и some_other_godfathers.

Надеюсь, что поможет: -)

...