0

У меня есть две формы, которые я хочу отправить из new.html.erb, которые обслуживаются контроллером status_updates. Форма init и форма stat.Почему моя одна форма представляет обе формы на этой странице?

Когда я отправляю стат-форму, все работает отлично.

В форме инициализации есть другой контроллер, на который он отвечает. Проблема в том, что когда я отправляю эту форму, она сразу же пытается найти объект для формы внутри контроллера для формы init.

Если я иду на этот контроллер и предоставил экземпляр объекта, он отправит формы.

Вот ошибка, когда я представляю форму init.

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

Форма старта подает штраф. Когда отправляется форма init, она также пытается обработать форму stat. Если я предоставил модель @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

проверю. Хотя, как получилось, если я не включаю тот или другой и не отправляю форму, она проходит правильно? –

+0

Мой контроллер имеет это в нем: def new @status_update = current_user.status_update.build, если user_signed_in? end –

+0

Формы не конфликтуют друг с другом, просто вы можете отправлять только по одному. Так что да, он должен работать. – basgys

Смежные вопросы