Ruby on rails RubyonRails:更改列表顺序后未显示错误消息
我最近请求帮助重新排列复选框列表 我找到了一个很好的答案,然后离开并更改了代码。由此,Ruby on rails RubyonRails:更改列表顺序后未显示错误消息,ruby-on-rails,ruby,error-handling,controller,Ruby On Rails,Ruby,Error Handling,Controller,我最近请求帮助重新排列复选框列表 我找到了一个很好的答案,然后离开并更改了代码。由此, <div class="tech" STYLE="text-align: left;"> <b>Technologies:</b> <style> .split { text-align:left; } </style> <p><ul> <% for technol in Techno
<div class="tech" STYLE="text-align: left;">
<b>Technologies:</b>
<style>
.split { text-align:left; }
</style>
<p><ul>
<% for technol in Technol.all %>
<li class="split">
<%= check_box_tag "project[technol_ids][]", technol.id, @project.technols.include?(technol) %>
<%= technol.tech %>
</li>
<% end %>
</ul>
</p>
我现在注意到,如果用户进入一个新项目,并且验证我的代码中出现的标志或验证我的代码中出现的标志的格式,则不会显示错误消息,相反,我会收到以下错误消息:
NoMethodError in Projects#create
line #256 raised:
undefined method `each' for nil:NilClass
Extracted source (around line #256):
253:
254: <p><ul>
255:
256: <% @all_technols.each do |technol| %>
257:
258:
259:
在控制器的create
方法中,或者不管处理提交的操作的名称是什么,请确保在呈现new
视图之前再次填充@all\u technols
,否则会出现此错误
因此,在创建
操作中,例如:
else
format.html { @all_technols = Technol.order('tech ASC'); render action: "new" }
format.json { render json: @project.errors, status: :unprocessable_entity }
end
在控制器的create
方法中,或者不管处理提交的操作的名称是什么,请确保在呈现new
视图之前再次填充@all\u technols
,否则会出现此错误
因此,在创建
操作中,例如:
else
format.html { @all_technols = Technol.order('tech ASC'); render action: "new" }
format.json { render json: @project.errors, status: :unprocessable_entity }
end
我已将我的create
操作添加到我的问题中。我不明白为什么在它工作之前,添加代码来更改顺序会影响它?因为之前,您直接查询数据库中的Technol。视图中的所有,都没有中间变量。现在您有了一个名为@all_technols
,您可以从控制器中实例化它。因此,您必须确保在呈现视图之前对其进行实例化谢谢。这就是问题所在。我已将我的create
操作添加到我的问题中。我不明白为什么在它工作之前,添加代码来更改顺序会影响它?因为之前,您直接查询数据库中的Technol。视图中的所有,都没有中间变量。现在您有了一个名为@all_technols
,您可以从控制器中实例化它。因此,您必须确保在呈现视图之前对其进行实例化谢谢。这就是问题所在。
def create
@project = Project.new(params[:project])
@project.client = params[:new_client] unless params[:new_client].blank?
@project.role = params[:new_role] unless params[:new_role].blank?
@project.industry = params[:new_industry] unless params[:new_industry].blank?
@project.business_div = params[:new_business_div] unless params[:new_business_div].blank?
if !params[:technols].nil?
params[:technols][:id].each do |tech|
if !tech.empty?
@project_technol = @project.projecttechnols.build(:technol_id => tech)
end
end
end
respond_to do |format|
if @project.save
format.html { redirect_to @project, notice: 'Project was successfully created.' }
format.json { render json: @project, status: :created, location: @project }
else
format.html { render action: "new" }
format.json { render json: @project.errors, status: :unprocessable_entity }
end
end
end
else
format.html { @all_technols = Technol.order('tech ASC'); render action: "new" }
format.json { render json: @project.errors, status: :unprocessable_entity }
end