@exploitvn

Какие могут быть причины возникновения NoMethodError при валидации поля collection_select, ссылающегося на другую модель?

Есть модель SubClass с валидацией полей:
belongs_to :func_class 
  validates :func_class_id, presence: true
  validates :title, presence: { message: "Заголовок не должен быть пустым" }
  validates :title, length: { in: 3..500, message: "Длина Заголовка должна быть от 3 до 500 символов" }

Есть контроллер SubClassesController с объявленными переменными:
def new
    @sub_class = SubClass.new
    @func_class_all = FuncClass.all
  end

И сама форма _form.html.erb
<%= form_for(@fire_sub_class) do |f| %>
.....
<div class="field">
      Title:<br>
      <%= f.text_field :title %>
    </div>    
    <div class="field">
      Func class:<br>
      <%= f.collection_select(:func_class_id, @func_class_all, :id, :title) %>
    </div>
.....

При заполнении формы невалидными значениями (например пустой title), возникает данное исключение NoMethodError
"undefined method `map' for nil:NilClass", вместо указанных при валидации сообщений (свойство message). Причем ссылается на строку с элементом collection_select в _form.html.erb

Сама таблица FuncClass естественно не пустая. Модель FuncClass тоже достаточно простая, с парой текстовых полей.
has_many :sub_class, dependent: :destroy
  validates :title, presence: { message: "Заголовок не должен быть пустым" }
  validates :title, length: { in: 3..254, message: "Длина Заголовка должна быть от 3 до 254 символов" }
  validates :title, uniqueness: { message: "Заголовок должен быть уникальным!" }

Вот пример вызова:
Parameters:
{"utf8"=>"✓",
 "authenticity_token"=>"iXBbWvvPlsIYqby0lKEJYTsUAaMl1T54tKFumDmRAWE=",
 "sub_class"=>{"title"=>"",
 "func_class_id"=>"1"},
 "commit"=>"OK"}

В модели FuncClass валидация проходит успешно, и в случае ошибочно введенных данных, как и положено, появляется указанное мною в модели сообщение (свойство message).

Используемые версии ПО:
ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-linux]
Rails 4.0.2

Заранее спасибо, за любую полезную информацию.
  • Вопрос задан
  • 2707 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Shetani
В исключении говорится что переменная f имеет значение nil и принадлежит классу NilClass, у которого отсутствует метод map.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы