Проблемы с сохранением связанной модели и последующим извлечением некоторых данных из нее - PullRequest
0 голосов
/ 19 марта 2011

Я использую Ruby on Rails 3 и пытаюсь извлечь некоторые данные из только что сохраненной дочерней модели (связанной модели), чтобы сохранить эти данные в родительской модели.

Точнее (по шагам) я хотел бы сделать:

  1. Сохранить дочернюю модель Учетная запись родительской модели Пользователь
  2. Получить только что созданное значение идентификатора учетной записии сохранить это значение в атрибуте модели User с именем users_account_id.

... и более явно (в значениях). Мне бы хотелось иметь следующий сценарий после сохранения учетной записи дочерней модели:

# Account values
Account.id = 222
Account.name = "Test_name"
...
Account.user_id = 111

# User values
User.id = 111
User.users_account_id = 222

Я уже выполнил первый шаг , но как я могу реализовать второй шаг?


Для получения учетной записиID, я пытался использовать обратный вызов ассоциации

class User < ActiveRecord::Base
  has_one :account, :before_add => :callback_name


  validates_associated :account
  accepts_nested_attributes_for :account

  def callback_name
    self.users_account_id = Account.find_by_id(self.id).id
  end
end

, но я получаю эту ошибку:

Unknown key(s): before_add

Ответы [ 2 ]

1 голос
/ 19 марта 2011

Я собираюсь немного уйти от вашего вопроса и спросить, почему вам нужны идентификаторы, указывающие в обоих направлениях?Я предполагаю, что вы хотите, чтобы ваш пользователь был связан с учетной записью, а учетная запись должна иметь одного или нескольких пользователей.«Rails Way» для этого будет выглядеть примерно так:

class User < ActiveRecord::Base
    belongs_to :account
end

class Account < ActiveRecord::Base
    has_many :users
end

В вашей базе данных таблица users будет иметь account_id, а таблица accounts будет , а не иметь идентификатор пользователя любого типа.

Это все равно позволит вам использовать ассоциацию в обоих направлениях:

some_user.account # Returns the correct account object
some_account.users # Returns all users for the account

Надеюсь, это поможет в некоторой степени!

1 голос
/ 19 марта 2011

Это слишком много. Все, что вам нужно сделать, это указать user_id в форме создаваемой учетной записи в виде скрытого поля.

<% form_for(@account) do |f| %>
    <%= f.hidden_field :user_id, :value => current_user.id %>
<% end %>

Конечно, добавьте другие поля, которые вы хотите использовать для учетной записи, и вам нужен объект current_user, который вам в любом случае понадобится при вашей текущей логике.

...