2011-03-19 4 views
0

Ruby on Rails 3을 사용 중이며 방금 저장 한 하위 모델 (관련 모델)에서 일부 데이터를 검색하여 해당 데이터를 상위에 저장하려고합니다 모델.관련 모델을 저장하고 그 중 일부 데이터를 검색하는 데 문제가 발생했습니다.

더 정확하게 (단계) 내가하고 싶은 :

  1. 저장
  2. 가 방금 만든 계정의 ID 값을 검색하고 사용자 모델에서 그 값을 저장 상위 모델 사용자의 하위 모델 계정 속성은 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 

를 사용하는 tryed하지만 난이 오류 :이 방법은 과잉이다

Unknown key(s): before_add 
+0

컬렉션에 'before_add'만 사용할 수 있습니다 (예 : 'has_many' 또는'has_and_belongs_to_many' 관계. –

+0

무엇입니까? 그래서 이상한 연관 – fl00r

+0

@ fl00r eheheh ;-) – user502052

답변

1

. user_id를 숨겨진 필드로 만들려는 계정의 형태로 넣기 만하면됩니다.

물론 원하는 다른 필드를 계정에 추가하면 현재 논리에서 필요로하는 current_user 개체가 필요합니다.

+0

내가 사용할 수있는 "잔인한 사람"이 적다. – user502052

+0

예, 제가 작성한 코드입니다. 그것은 내가 누락 된 것이 아닌 한 모든 user_id 추가 물건을 바꿉니다하지만 난 당신이 정말로 레일 협회를 얻지 않고 자신의 로직을 가지고 있다고 생각합니다 – s84

1

질문에 조금씩 답을하고 두 방향으로 가리키는 ID가 필요한 이유를 묻습니다. 귀하의 사용자가 계정과 관련이 있고 계정이 하나 이상의 사용자를 갖기를 원한다고 가정합니다. 은 "레일 웨이는"다음과 같은이 될 뭔가해야 할 일 :

class User < ActiveRecord::Base 
    belongs_to :account 
end 

class Account < ActiveRecord::Base 
    has_many :users 
end 

데이터베이스에서 users 테이블 account_id있을 것이다을하고 accounts 표는 어떤 종류의 USER_ID이없는것입니다.

이 여전히 양방향으로 사용자에게 연결을 당신을 수 있습니다 :이 다소 도움이

나는 희망
some_user.account # Returns the correct account object 
some_account.users # Returns all users for the account 

!

+0

(비록 당신이 저와 같은 생각을하지 않더라도 has_many \ belogns_to 계정과 사용자의 관계) 귀하의 경우에는 'account'테이블에 'user_id'* * *를 추가하고 싶습니다 ... – user502052

관련 문제