2012-07-13 50 views
0

我想我需要一点帮助来理解一个简单的Rails 3.2与嵌套窗体的一对一关联是如何工作的。我有一个积分表,当我第一次浏览它时,它会将所有内容都加载到空白处。当我保存一切看起来不错时,它甚至有正确的外键。现在,当我尝试通过加载表单再次编辑此记录时,外键(results.pickem_id)被取消,并且没有任何内容加载到表单中。它被调用第二个@pickem.build_result。我需要做什么才能编辑此表单?我觉得我在这里的正确轨道,所以希望我错过了一些简单的东西。我只包含了相关的代码片段,但如果需要的话可以提供更多的代码片段。Rails 3.2 build_association在表单加载时将我的外键清空

Pickem.rb

attr_accessible :result_attributes 
    has_one :result 
    accepts_nested_attributes_for :result 

Result.rb

belongs_to :pickem

pickems_controller.rb

def update 
    @pickem = Pickem.find params[:id] 

    if @pickem.update_attributes params[:pickem] 
     redirect_to pickem_path(@pickem), :notice => 'The pickem has been successfully updated.' 
    else 
     render "edit" 
    end 
    end 

    def results #This is the results form 
    @pickem = Pickem.find params[:id] 
    @pickem.build_result #:pickem_id => params[:id] 
    end 

results.html.erb

<%= simple_form_for @pickem, :html => {:class => "form-horizontal"} do |f| %> 
    <%= f.simple_fields_for :result do |r| %> 
    <%= r.input :pickem_id, :input_html => { :value => params[:id] }, :as => 'hidden' %> 
    <%= r.input :first_name, :label => 'First Name:' %> 
    <% end %> 
<% end %> 

回答

0

试试这个。我觉得这有点麻烦,但也许它会起作用。

@pickem.result = @pickem.build_result if @pickem.result.blank? 
+0

你先生,是男人。这工作。不知道它是否是首选的“Rails方式”,但看起来很简单。 – 2012-07-13 04:10:19