【问题标题】:Another one: Rails 4: First argument in form cannot contain nil or be empty另一个:Rails 4:表单中的第一个参数不能包含 nil 或为空
【发布时间】:2015-12-22 22:24:42
【问题描述】:

我在尝试为新公司帐户创建表单时收到“表单中的第一个参数不能包含 nil 或为空”错误。我已经在 Stack Overflow 上研究了类似问题的答案,但它们似乎没有解决我遇到的问题,因为我确保在我的 CompanyAccountsController#new 操作中有一个 CompanyAccount 模型的实例。

这是我的代码的相关部分。

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

views/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| %>

解决这个问题,正如这里许多类似问题的答案所建议的那样。我确实认为这似乎有点 hacky,我忽略了真正的错误。如果有人能帮我解决这个问题,我将不胜感激。

【问题讨论】:

  • 这是整个控制器的代码吗?因为那时没有设置company_account_params
  • 不,这不是完整的代码。我只是没有添加 company_account_params 方法。看起来像这样def company_account_params params.require(:company_account).permit( :name, :state ) end
  • 只是问,因为这可能是个问题。你的模型文件是什么样的?数据库设置好了吗?您可以访问公司帐户表吗?正如@m4risU 所提到的,您是否有一个回调,例如set_company_accounts,并让它用before_action 填充数据?如果是这样,请确保在其上放置异常,或者让它仅填充控制器的必要方法。这可能是另一个问题。
  • 亚历山大,感谢您的努力。回答你的问题。该模型看起来就像一个通用模型。我没有添加任何东西。数据库已建立,我可以从 rails 控制台访问 company_accounts 表。我没有使用回调,也没有使用任何 before_action 方法。这就是我如此困惑的原因。
  • 你能告诉我们错误的堆栈跟踪吗? (通常是 20-30 行文件名)可能帮助我们确定错误的来源。

标签: ruby-on-rails ruby-on-rails-4 formhelper


【解决方案1】:

这里的代码是 100% 正确的。请检查您的应用程序控制器是否没有在任何地方覆盖 @company_account 的值

【讨论】:

  • ApplicationController 中没有添加任何代码,只有默认代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多