error语言 - 表单中的第一个参数不能包含 nil 或为空



先发制人地开始,我已经看过各种类似的文章来处理这个问题,但我仍然得到错误。
我从轨道上开始,并尝试创建一个 GPA 计算器和跟踪器应用程序来娱乐(并花了很多时间搜索文档);我有一个单一的控制器和视图,因为每次重定向到一个完全不同的页面来计算或保存新的 GPA 看起来会很丑陋。
在我添加表单之前,Rails 将毫无错误地显示所有内容,当前没有编写其他 erb,并且表单旨在从"f.selection"标签提交字母等级值。
罪魁祸首@cgpa <%= form_for @cgpa do |f| %>.

我的表单来自主\索引视图:

<%= form_for @cgpa do |f| %>
 <div class="field">
  (...)
 </div>
 <div class="actions">
  <%= f.submit 'Calculate' %>
 </div>
<% end %>

我的控制器:

class MainController < ApplicationController
 def index
  #@cgpa = CurrentGpa.all  #currently calls a key_to error while form exists, otherwise no error is raised
  @pgpa = PastGpa.all
  @csem = CurrentSemester.all
  @psem = PastSemester.all
 end
 def new 
  @cgpa = CurrentGpa.new
 end
 def create
 (...)
 end
end

路线很简单Rails.application.routes.draw { root 'main#index'; resources :main }

如果需要任何其他信息,请告诉我添加>.>

当您使用: <%= form_for @cgpa do |f| %>这会自动尝试将表单提交到CurrentGpasController create操作,为此它会向current_gpas_path发送请求。所以你在路由中没有这个路径,这就是它抛出错误的原因。您可以为CurrentGpa添加路由,例如:

resources :current_gpas

或者您可以在form_for中指定路径:

<%= form_for @cgpa, url: any_path do |f| %>

因此,这会将您的form提交到指定的url

如果添加current_gpas路由,请创建controlleraction来处理您的输入。

正如评论中提到的,确实在index行动中添加了@cgpa = CurrentGpa.new。以上将解决您之后遇到的错误。

希望这有帮助。

最新更新