Rails - 简单形式 - nil:NilClass 的未定义方法 `model_name'

Rails - Simple Forms - undefined method `model_name' for nil:NilClass

我正在尝试创建一个表单,您可以在其中 select 要导出的表格。我制作了一个简单的表格,其中包含可以导出的表格列表。我的计划是允许用户切换他们想要导出的表格的复选框,因此他们将能够下载包含表格的 zip 文件。

目前,当我尝试使用表单转到页面时,出现错误:

undefined method 'model_name' for nil:NilClass

我在网上看到的大多数简单表单的使用包括使用表单创建新项目以保存在他们的模型中。结果,simple_form_for @example 行似乎意味着当用户单击提交按钮时,控制器中有一行 @example = SomeClass.new"。我的理解是表单的用户输入保存在@example中,可以被controller使用。但是,由于我没有在模型中创建新项目,我只想使用来自@example 的值,我不确定在控制器中放入什么来消除错误,以便我可以对其余部分进行编码控制器中的功能。

控制器:

class FormController < ApplicationController

  def index
    @options = []
    print(@options)
  end

end

使用的表格:

<h2>Which tables do you want to export?</h2>
<div class="well">
  <% tables_in_model = %w(Table1 Table2 Table3) %>
  <%= simple_form_for @selected_options, :url => form_index_path, :method => :get do |f| %>
    <%= f.input :options, as: :check_boxes, collection: tables_in_model %>
    <%= f.button :submit, as: :Submit %>
  <% end %>
</div>

正如您在问题中所说的那样,当用户的操作与创建或编辑 ActiveRecord 模型相关时,应该使用 simple_form 向用户呈现表单。

例如,当编写启用搜索功能的代码时,您的目标是简单地将一组用户选择的参数传递给控制器​​,您不应该使用它。我相信您与您所描述的功能处于相似的位置。

简单的解决方案:使用 rails form related DSL 来启动您的表单!

希望这是您需要的答案。如果需要,请随时询问更多详细信息。干杯!

我认为你正在使用 simple_form 你需要指定 like @selected_options = SelectedOptionModel.new(params) 进入你的控制器 然后它进入视图。 如果您没有任何模型,您可以使用 form_tag

像这样:

<%= form_tag("/search", method: "get") do %>
  <%= label_tag(:q, "Search for:") %>
  <%= text_field_tag(:q) %>
  <%= submit_tag("Search") %>
<% end %>

这将创建如下 html 表单:

<form accept-charset="UTF-8" action="/search" method="get">
  <input name="utf8" type="hidden" value="&#x2713;" />
  <label for="q">Search for:</label>
  <input id="q" name="q" type="text" />
  <input name="commit" type="submit" value="Search" />
</form>