2015-11-12 36 views
1

我正在使用simple_form,這是一種已知的Rails gem,可以使表單更容易一些。我無法編輯表單。我可以完美地保存記錄,但是當我轉到edit操作時,我看不到數據庫中嵌套對象的記錄。關於編輯嵌套表格的問題

模型

# app/models/user.rb 
has_one :member 
has_one :academic, through: :member 

accepts_nested_attributes_for :member, reject_if: :all_blank 

# app/models/member.rb 
belongs_to :user 

has_one academic, dependent: :delete 
accepts_nested_attributes_for academic, allow_destroy: true, reject_if: :all_blank 

# app/models/academic.rb 
belongs_to :member 

控制器

# app/controllers/member_controller.rb 

def edit 
@member = Member.find(params[:id]) 
@academic = Academic.find_by_member_id(params[:id]) 

@member.build_academic 
@member.academic.build_exchange_student # ExchangeStudent belongs_to :academic also 
end 

查看

# app/views/_form.html.erb partial on app/views/edit.html.erb 
<%= simple_form_for @member, url: database_members_path do |f| %> 

<%= f.fields_for :academic do |academic_exchange_student| %> 
    <%= academic_exchange_student.fields_for :exchange_student do |exchange| %> 

<!-- ##### Exchange student --> 
    <div class="row"> 
     <%= academic_exchange_student.text_field :major%> 
    </div> 

<% end %> 
<% end %> 

是的,我允許在params.require(...)ids。記錄保存完好,我可以在rails console中看到它。

當我轉到此edit頁面時,我可以看到已在text_field中的成員的信息,但我沒有在那裏看到@member.academic.major的信息。

此外,如果我到編輯頁面並在瀏覽器中返回,則會以神祕方式刪除academic記錄。

任何幫助將不勝感激。謝謝。

回答

1

我想這裏的問題是,你在編輯視圖中建立一個新的academic對象,在User模型中只能有一個academic

我建議你建立新學年只有當不存在的話:

def edit 
    @member = Member.find(params[:id]) 

    @member.build_academic unless @member.academic 
    @member.academic.build_exchange_student unless @member.academic.exchange_student 
end 

PS:你也不需要@academic變量,除非它不是在編輯視圖中的其它地方使用。

+1

非常感謝你,工作完美!我認爲使用'@ academic',表單會以某種方式獲取對象的數據,就像它使用'@member = Member.find(id)'一樣。再次感謝! –

+0

不客氣! –