2

Я хочу динамически создавать флажки с пользователями в базе данных, которые должны быть доступны (один или несколько). Тем не менее, я, видимо, делать что-то неправильно, потому что ниже код дает мне следующее сообщение об ошибке:undefined метод `each 'for nil: NilClass?

undefined method `each' for nil:NilClass 
... 
<% @users.each do |user| %> <--- the line with the error 

контроллер:

class ProjectsController < ApplicationController 
    ... 

    def new 
     @project = Project.new 
     @users = (current_user.blank? ? User.all : User.find(:all, :conditions => ["id != ?", current_user.id])) 
    end 

    ... 
end 

вид (new.html.erb):

<%= form_for @project do |f| %> 
    <div class="alert alert-block"> 
     <%= f.error_messages %> 
    </div> 
    <div class="text_field"> 
     <%= f.label :title%> 
     <%= f.text_field :title%> 
    </div> 
    <div class="text_field"> 
     <%= f.label :description%> 
     <%= f.text_field :description%> 
    </div> 
    <div class="dropdown"> 
     <%= f.label :start_date%> 
     <%= f.date_select :start_date %> 
    </div> 
    <div class="dropdown"> 
     <%= f.label :end_date%> 
     <%= f.date_select :end_date %> 
    </div> 
    <% @users.each do |user| %> 
     <%= check_box_tag "project[member_ids][]", user.id, @project.member_ids.include?(user.id), :id => "user_#{user.id}" %> 
     <%= label_tag "user_#{user.id}", user.first_name %> 
    <% end %> 
    <div class="checkbox"> 
</div> 
    <div class="submit"> 
     <%= f.submit "Spara" %> 
    </div> 
<% end %> 

модель:

class Project < ActiveRecord::Base 
    has_and_belongs_to_many :users 
    belongs_to :user 
    has_many :tickets, :dependent => :destroy 

    ... validations ... 

    attr_accessible :user_id, :title, :description, :start_date, :end_date 
end 

У меня есть пять пользователей в моей базе данных, поэтому таблица не пуста или ничего. Что я здесь делаю неправильно?

+0

Я хотел бы предложить включить '@users = ... 'в операторе' create' вашего контроллера. –

ответ

7

Ошибка при попытке отправить форму и не удалось выполнить проверку. Если ваше действие создает шаблон new, вот где ваша проблема.

как предложено одним из комментаторов, вы можете объявить @users в своем действии на создание. Но я предлагаю только объявить его, когда он не проходит проверку (для уменьшения количества запросов дб на 1 и уменьшить создание ненужных активных записей объектов), как показано в следующем коде

def create 
    @project = Project.new params[:project] 

    if @project.save 
    redirect_to @project 
    else 
    @users = User.all # only declare this here when it is actually needed 
    render :new 
    end 
end 
+0

Имел подобный issure с рельсами 4.2, и этот ответ помог мне исправить это. – Lotix

Смежные вопросы