0

我有兩種形式,我想從new.html.erb提交,由status_updates Controller提供。 init表單和stat表單。爲什麼我的一個表單在這個頁面上提交兩個表單?

當我提交統計表格時,一切正常。

init窗體有一個不同的控制器它回答。問題是,當我提交這個表單時,它立即嘗試在初始表單的控制器中找到表單對象stat

如果我去那個控制器並提供一個對象的實例,它會提交兩個表單。

下面是我提交init表單時的錯誤。

undefined method `model_name' for NilClass:Class 
<div id='stat'> 
    <%= form_for(@status_update) do |f| %> 

統計表單提交罰款。當提交初始表單時,它也會嘗試處理統計表單。如果我在init的動作控制器中提供模型@status_update,它將提交兩個表單。如果不是,則會拋出上述錯誤。

這裏的init的形式

<div id='init'> 
    <%= form_for(current_user, method: :put) do |f| %> 

    <%= f.label :target_bf_percent %> 
    <%= f.text_field :target_bf_pct %> 

    <%= f.label :Deficit_percent %> 
    <%= f.text_field :deficit_pct %> 

    <%= f.label :activity_factor %> 
    <%= f.select(:activity_factor, options_for_select( 
           [['Pick One', nil], 
           ['Sedentary (Desk Job)', 1.2], 
           ['Light Activity (1-3 day a week)', 1.35], 
           ['Moderate Activity (3-5 days a week)', 1.55], 
           ['Very Active (6-7 days a week)', 1.75], 
           ['Extremely Active (Atheletic Endurance)', 1.95]])) 
    %> 
    <%= f.submit "Post", class:"btn btn-large btn-primary" %> 
<% end %> 

</div> 

的代碼,並在統計表格

<div id='stat'> 
    <%= form_for(@status_update) do |f| %> 

    <%= f.label :current_weight %> 
    <%= f.text_field :current_weight %> 

    <%= f.label :current_bf_pct %> 
    <%= f.text_field :current_bf_pct %> 

    <%= f.submit "Post", class:"btn btn-large btn-primary" %> 
<% end %> 

的status_update控制器新動作的代碼:

def new 
    @status_update = current_user.status_update.build if user_signed_in? 
end 

用戶S控制器更新動作:

def update 
    if current_user.update_attributes!(params[:user]) 
     flash[:success] = "Your personal settings have been saved!" 
     render new_status_update_path 
    else 
     flash[:error] = "Whoops! There was an error saving your personal settings. Please try again." 
     render new_status_update_path 
    end 
end  

  • 請讓我知道我能做些什麼來改善這個問題。

回答

0

如果您在同一頁上呈現一個或多個表單,則無關緊要。

你的問題是由@status_update引起的,因爲它是零,但你已經知道了。

仔細檢查它是否在控制器中初始化。

+0

我會檢查。雖然,如果我不包括其中一個或另一個,並提交它正確地通過的表單,怎麼辦? – 2013-02-18 22:12:13

+0

我的控制器有這個:def new @status_update = current_user.status_update.build if user_signed_in? 結束 – 2013-02-18 22:24:10

+0

表單不會相互衝突,只是您一次只能提交一個表單。所以是的,它必須工作。 – basgys 2013-02-18 22:25:06

相關問題