1

사용자 및 프로필 모델을 단일 양식에 표시하려고 할 때 * fields_for *를 얻으려고 할 때 문제가 발생했습니다. * has_one * and * belongs_to * 관계.일대일 관계를 사용할 때 fields_for를 통해 출력이 없음

class User < ActiveRecord::Base 
    has_one :profile 
    accepts_nested_attributes_for :profile 

class Profile < ActiveRecord::Base 
    belongs_to :user 

컨트롤러는 매우 간단하고 표준입니다 : :

def new 
    @user = User.new 
    end 

    def edit 
    @user = User.find(params[:id]) 
    end 

을 그리고 여기에 현재 그것으로보기 밖으로 조각입니다

그래서 여기 추출물은 모델 클래스의 최고 형태입니다 스탠드 :

<%= form_for(@user) do |f| %> 

    <% f.fields_for :profile do |profile_form| %> 
    <div class="field"> 
     <%= profile_form.label :name %><br /> 
     <%= profile_form.text_field :name %> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :email %><br /> 
    <%= f.text_field :email %> 
    </div> 

    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

나는 다음과 같이 다른 것을 시도했다 :

내가 수동으로 필드를 추가하는 경우
<% fields_for @user.profile do |profile_form| %> 

그리고 모든 작동합니다 :

<div class="field"> 
    <label for="user_name">Name</label><br> 
    <input id="user_name" name="user[profile_attributes][name]" size="30" type="text" value="<%= @user.profile.name %>"> 
    </div> 

그것은 내가했습니다 있지만이 기능은 후드를 작동하는 방법을 정확히 확인하지 레일 상당히 새로 온 것을 언급 할 가치가 documentationguide을 읽어보십시오. 또한 내 검색에서 fields_for 일대 다 관계의 많은 예제 그래서 아마도 내가 잘못된 방식으로 갈거야?

모든 도움, 조언과 추가 읽기가 훨씬 코드에서

건배 :-)

답변

5

를 감사 :

<% f.fields_for :profile do |profile_form| %> 

않습니다하지 될 것을 필요 (레일즈 3의 새로운 동작 때문에) 이렇게 쓰여졌습니다 :

<%= f.fields_for :profile do |profile_form| %> 
+0

나는 무언가 간단하다는 것을 알았습니다. - 덕분에 많이 :-) 버전 3의 레일을 시작 했으므로 버전 간 차이점을 찾기 위해 검색 할 때 어려울 수 있습니다. 이와 같은 내용은 쉽게 건너 뛸 수 있지만 . 이것과 관련하여 읽을 가치가있는 것은 무엇입니까? –

+0

아닙니다. 도우미는 ERB 블록 ('do %> ... <% end')을 사용하면 Rails 2를 작성하는 데 어려움이 있었지만 (메모리 효율성은 더 좋았지 만) Rails 3에서는 모든 것이 단순한 문자열처럼 작동하도록하기로 결정했습니다. 따라서'='을 추가하는 것을 잊어 버리면 문자열은 인쇄되지 않습니다. 그러나 Rails에서 2 번 나온 많은 예제는'='-주의 할 점이 없다. –

+0

저는 2 시간 동안이 작업을하도록 고심하고 있습니다. 당신은 이걸 가지고 제 베이컨을 구해 줬어요 - 빨리 인터넷 검색을했으면 좋았을 텐데! 정말 고마워! –

관련 문제