Rails - Простые формы - неопределенный метод `имя_модели 'для nil: NilClass - PullRequest
0 голосов
/ 27 апреля 2018

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

В настоящее время, когда я пытаюсь перейти на страницу с формой, я получаю сообщение об ошибке:

undefined method 'model_name' for nil:NilClass

Большая часть использования простых форм, которые я вижу в Интернете, состоит в использовании форм для создания новых элементов для сохранения в их моделях. В результате кажется, что строка simple_form_for @example будет означать, что когда пользователь нажимает кнопку отправки, в контроллере появляется строка, такая как @example = SomeClass.new". Насколько я понимаю, пользовательский ввод формы сохраняется в @example и может использоваться контроллером. Однако, поскольку я не создаю новый элемент в модели, я просто хочу использовать значения из @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>

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Я думаю, что вы используете simple_form , вам нужно указать как @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>
0 голосов
/ 27 апреля 2018

Как вы правильно сказали в своем вопросе, simple_form следует использовать для отображения форм пользователю, когда его действия связаны с созданием или редактированием моделей ActiveRecord.

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

Простое решение, хотя: используйте DSL для рельсов, связанных с формой, чтобы получить форму!

Надеюсь, это тот ответ, который вам нужен. Не стесняйтесь спрашивать более подробную информацию, если это необходимо. Ура!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...