2015-12-22 6 views
-1

Я получаю ошибку «Первый аргумент в форме не может содержать nil или быть пустой» при попытке создать форму для новой учетной записи компании. Я изучил ответы на подобные вопросы здесь, в разделе «Переполнение стека», но они, похоже, не затрагивают проблему, с которой я столкнулся, так как я убедился, что экземпляр модели CompanyAccount в моем новом действии CompanyAccountsController #.Еще один: Rails 4: Первый аргумент в форме не может содержать nil или быть пустым

Вот некоторые из частей моего кода.

CompanyAccountsController:

class CompanyAccountsController < ApplicationController 
    def new 
     @company_account = CompanyAccount.new 
    end 

    def create 
     @company_account = CompanyAccount.new(company_account_params) 

     if @company_account.save 
     flash[:notice] = "New customer created." 
     redirect_to root_url 
     else 
     flash[:error] = "Something went wrong." 
     render "new" 
     end 
    end 
end 

просмотров/company_accounts/new.html.erb

<div class="row"> 
    <div class="col-lg-8"> 
    <div class="well bs-component"> 

    <h2>Add New Customer</h2> 

    <%= form_for(@company_account) do |f| %> 

    <p> 
     <%= f.label 'Name'%><br> 
     <%= f.text_field :name %> 
     </p> 

     <p> 
     <%= f.label 'State' %><br> 
     <%= f.text_field :state %> 
     </p> 

     <p> 
     <%= f.submit class: 'btn btn-success', id: 'submit_customer', value: 'Save customer' %> 
     </p> 
    <% end %> 

</div> 

Маршруты:

company_accounts POST /company_accounts(.:format)   company_accounts#create 
new_company_account GET /company_accounts/new(.:format)  company_accounts#new 
edit_company_account GET /company_accounts/:id/edit(.:format) company_accounts#edit 
company_account GET /company_accounts/:id(.:format)  company_accounts#show 
       PATCH /company_accounts/:id(.:format)  company_accounts#update 
       PUT /company_accounts/:id(.:format)  company_accounts#update 
       DELETE /company_accounts/:id(.:format)  company_accounts#destroy 
      root GET /         company_accounts#index 

Прямо сейчас мое решение заключается в использовании

<%= form_for(CompanyAccount.new) do |f| %> 

, чтобы решить эту проблему, как предложено в ответе на многие подобные вопросы здесь. Я думаю, что это кажется немного взломанным, и я забываю, что действительно неправильно. Я был бы очень признателен, если бы кто-то помог мне с этим.

+0

Это код всего контроллера? Потому что тогда не задано 'company_account_params'. –

+0

Нет, это не весь код. Я просто не добавил метод company_account_params. Похоже, что это 'def company_account_params params.require (: company_account) .permit ( : name, : state) end' –

+0

Просто спрашивайте, потому что это могло быть проблемой. Как выглядит ваш файл модели? Создана ли база данных? Вы можете получить доступ к таблице счетов компании? И как упоминалось в @ m4risU, есть ли у вас обратный вызов, например 'set_company_accounts', и пусть он заполняет данные с помощью' before_action'? Если это так, убедитесь, что вы наложили на него исключение или иначе разрешите только заполнить необходимые методы вашего контроллера. Это может быть другой проблемой. –

ответ

0

Код на 100% правильный. Пожалуйста, проверьте свой контроллер приложения, не превысите ли вы значение @company_account в любом месте

+0

В ApplicationController не добавлен код, он просто имеет код по умолчанию. –