0

status_updates コントローラーによって提供される new.html.erb から送信したいフォームが 2 つあります。init フォームと stat フォーム。

統計フォームを送信すると、すべてが完全に機能します。

init フォームには、応答する別のコントローラーがあります。問題は、このフォームを送信すると、init フォームのコントローラー内でstatフォームのオブジェクトをすぐに見つけようとすることです。

そのコントローラーに移動してオブジェクトのインスタンスを提供すると、両方のフォームが送信されます。

initフォームを送信したときのエラーは次のとおりです。

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

統計フォームは正常に送信されます。init フォームが送信されると、stat フォームも処理しようとします。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 

ユーザーコントローラーの更新アクション:

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    

  • この質問を改善するために私にできることがあれば教えてください。
4

1 に答える 1

0

同じページに 1 つ以上のフォームをレンダリングするかどうかは問題ではありません。

あなたの問題は @status_update が nil であるため発生しますが、あなたはすでにそれを知っています。

コントローラーで初期化されているかどうかを再確認してください。

于 2013-02-18T20:50:47.930 に答える