gpt4 book ai didi

ruby-on-rails - 未定义方法 `each' 为 nil :NilClass?

转载 作者:行者123 更新时间:2023-12-02 07:37:37 24 4
gpt4 key购买 nike

我想用数据库中的用户动态创建复选框,应该可以选择(一个或多个)。但是,我显然做错了什么,因为下面的代码给我以下错误:

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

Controller :

class ProjectsController < ApplicationController
...

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

...
end

View (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

我的数据库中有五个用户,因此该表不为空或任何内容。我在这里做错了什么?

最佳答案

错误发生在您尝试提交表单但验证失败时。如果您的创建操作呈现 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

关于ruby-on-rails - 未定义方法 `each' 为 nil :NilClass?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14797262/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com