0

我有两个要从 new.html.erb 提交的表单,由 status_updates 控制器提供。init 形式和 stat 形式。

当我提交统计表格时,一切正常。

init 表单有一个不同的控制器来响应。问题是,当我提交此表单时,它会立即尝试在控制器中为 init 表单查找stat表单的对象。

如果我去那个控制器并提供对象的一个​​实例,它将提交两种形式。

这是我提交初始化表单时的错误。

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

统计表格提交正常。当初始化表单被提交时,它也会尝试处理 stat 表单。如果我在 init 的操作控制器中提供模型 @status_update ,它将提交两种形式。如果不是,则会引发上述错误。

这是初始化表单的代码

<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

您是否在同一页面上呈现一个或多个表单并不重要。

您的问题是由@status_update 引起的,因为它为零,但您已经知道了。

仔细检查它是否在您的控制器中初始化。

于 2013-02-18T20:50:47.930 回答