[RUBY-ON-RAILS] belongs_to 관계와 일에 fields_for와 accepts_nested_attributes_for 얻기
RUBY-ON-RAILSbelongs_to 관계와 일에 fields_for와 accepts_nested_attributes_for 얻기
나는 레일은 레일 2.3의 시설 accepts_nested_attributes_for 새로운를 사용하여 belongs_to 관계를 볼에 생성하는 중첩 된 양식을 얻을 수없는 것. 내가 사용할 수있는 리소스의 많은 체크 아웃 않았고 내 코드가 작동해야처럼 보이지만 날 폭발 fields_for, 나가 구성된 중첩 된 모델을 얼마나 함께 할 수있는 뭔가가 있다고 생각한다.
오류 I 히트 많은 원인이있을 수있는 공통의 하나입니다
'@account[owner]' is not allowed as an instance variable name
여기에 포함 된 두 모델은 다음과 같습니다 :
class Account < ActiveRecord::Base
# Relationships
belongs_to :owner, :class_name => 'User', :foreign_key => 'owner_id'
accepts_nested_attributes_for :owner
has_many :users
end
class User < ActiveRecord::Base
belongs_to :account
end
아마도 이것은 내가 사용자 모델 ACCOUNT_ID 키를 기반으로, 계정은 '주인'을 가질 수있는, '룽'그 일을하고, 할 수있다 '사용자',하지만 사용자가 하나의 '계정'가하고있는 곳입니다.
이것은 나에 불면 new.html.haml에서보기 코드입니다 :
- form_for :account, :url => account_path do |account|
= account.text_field :name
- account.fields_for :owner do |owner|
= owner.text_field :name
그리고이 새로운 동작에 대한 제어 코드는 다음과 같습니다
class AccountsController < ApplicationController
# GET /account/new
def new
@account = Account.new
end
end
내가로드 / 계정하려고 할 때 / 새 나는 다음과 같은 예외가 :
NameError in Accounts#new
Showing app/views/accounts/new.html.haml where line #63 raised:
@account[owner] is not allowed as an instance variable name
나는 신비 '빌드'방법을 사용하려고하는 경우 컨트롤러 아웃 단지 폭탄, 아마도 빌드는 멀티 레코드 관계를하기 때문이다 :
class AccountsController < ApplicationController
# GET /account/new
def new
@account = Account.new
@account.owner.build
end
end
You have a nil object when you didn't expect it!
The error occurred while evaluating nil.build
내가 컨트롤러에 @ account.owner_attributes =을 {}를 사용하여이 설정하려고하는 경우, 또는 @ account.owner = User.new, 내가 원래 오류 해요 "@account [소유자] 인스턴스로 허용되지 않습니다 변수 이름 ".
다른 사람은 방법은 belongs_to 관계와 협력 accepts_nested_attributes_for 새로운이 있습니까? 거기에 뭔가 특별하거나 다른 당신이해야 할인가? 모든 공식 예와 (Ryans 방명록에 걸쳐 큰 물건 등) 샘플 코드는 멀티 레코드 협회와 관련된다.
해결법
-
==============================
1.나는 당신의 accepts_nested_attributes이 관계의 반대쪽에 생각합니다. 어쩌면이 같은 작동까요?
나는 당신의 accepts_nested_attributes이 관계의 반대쪽에 생각합니다. 어쩌면이 같은 작동까요?
class Account < ActiveRecord::Base belongs_to :owner, :class_name => 'User', :foreign_key => 'owner_id' has_many :users end class User < ActiveRecord::Base belongs_to :account has_one :account, :foreign_key => :owner_id accepts_nested_attributes_for :account end
계정 구축을 위해 당신은 build_account을 사용하고 싶습니다.
당신은 문서에서 더 많은 예제를 볼 수 있습니다.
-
==============================
2.내가 너무 늦게 몇 달,하지만 난이 오류를 해결하기 위해 찾고 있던 내 상황은 내가 '얼굴 다른 방법'의 관계를 변경할 수없는 것이 었습니다.
내가 너무 늦게 몇 달,하지만 난이 오류를 해결하기 위해 찾고 있던 내 상황은 내가 '얼굴 다른 방법'의 관계를 변경할 수없는 것이 었습니다.
대답은 정말 매우 간단합니다, 당신은 당신의 새로운 액션에서이 작업을 수행해야합니다 :
@account.build_owner
유효한 개체를 가지고 있지 않았기 때문에 양식을 사용하여 fields_for를 표시하지 않은 이유였다. 당신은 거기 올바른 생각을했다 :
@account.owner.build
그러나이 작업 belongs_to 방법이 아니다. 이 방법은 has_many와 has_and_belongs_to_many 생성됩니다.
참고: http://guides.rubyonrails.org/association_basics.html#belongs-to-association-reference
-
==============================
3.나는 레일 2.3.5를 사용하고 있는데 나는 같은 일을 발견했습니다. active_record의 nested_attributes.rb의 소스를 체크 아웃, 그것은 belongs_to 잘 작동합니다 것 같습니다. 이 나타나는 그래서 그것은 "중첩 된 형태"버그가 있습니다.
나는 레일 2.3.5를 사용하고 있는데 나는 같은 일을 발견했습니다. active_record의 nested_attributes.rb의 소스를 체크 아웃, 그것은 belongs_to 잘 작동합니다 것 같습니다. 이 나타나는 그래서 그것은 "중첩 된 형태"버그가 있습니다.
나는 belongs_to 사용자와 정확히 당신처럼 중첩 된 형태를 갖는다 : 주소 및 주소는 사용자의 독립적이다.
그런 형태로, 난 그냥 할 <% f.fields_for : address_attributes가 할 | address_form | %> 대신에 <% f.fields_for의 : 주소 할 | address_form | %>. 임시 더 나은 방법이 될 때까지 해킹,하지만 작동합니다. 메소드 accepts_nested_attributes_for 같은 것을 포함 할 PARAMS을 기대하고있다 :
{사용자 => {address_attributes => {ATTR1 => '하나'ATTR2 => '개의'} NAME => 'MyName로'}
...하지만 fields_for을 생산하고있다 :
{사용자 => {주소 => {ATTR1 => '하나'ATTR2 => '개의'} NAME => 'MyName로'}
당신이없는이 방법은 has_one를 추가하려면 계정을 내 경우에는 작동하지 않는 코드에.
업데이트 : 더 나은 답을 찾았습니다
여기에 내가이 작품의 권리를 만들기 위해 사용하고 코드의 요점은 다음과 같습니다
요점 belongs_to와 중첩 된 양식 레일
희망이 도움이.
-
==============================
4.
class Account < ActiveRecord::Base belongs_to :owner :class_name => 'User', :foreign_key => 'owner_id' end
그것은 나를 위해 작동합니다. : foreign_key은> 'OWNER_ID'하는 내 경우에는 키 문제였다 =.
from https://stackoverflow.com/questions/1313149/getting-fields-for-and-accepts-nested-attributes-for-to-work-with-a-belongs-to-r by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 3 개 비활성화 세션 쿠키를 레일 (0) | 2020.02.19 |
---|---|
[RUBY-ON-RAILS] 어떻게 MySQL과 포스트 그레스 모두 소문자를 구분하지 쿼리를 작성합니까? (0) | 2020.02.18 |
[RUBY-ON-RAILS] 어떻게 RVM을 사용하고 전 세계적으로 사용할 수 보석을 만들려면 어떻게해야합니까? (0) | 2020.02.18 |
[RUBY-ON-RAILS] ActiveModel 시리얼에 매개 변수를 전달하는 방법 (0) | 2020.02.18 |
[RUBY-ON-RAILS] 레일 '기본 레이크 작업을 재정의 (0) | 2020.02.18 |