我的 Ruby on Rails 项目中有一个对象(工具)数据库。当我使用“rails dbconsole”和
select * from tools;
它返回工具对象的完整列表。但是当我尝试查看以下页面时,它给了我一个错误。
页:
<!DOCTYPE html>
<html lang="en">
<%= stylesheet_link_tag "tools", :media => "all" %>
<body>
<%= @tools.each do |tool| %>
<%= link_to(tool(image_tag.image_url)) %>
<% end %>
</body>
</html>
错误:
undefined method `each' for nil:NilClass
当我更改代码以添加针对 nil 对象的 if 语句时,页面可以正常工作(不显示任何工具)。
<% if @tools.nil? %>
<% else %>
<%= @tools.each do |tool| %>
<%= link_to(tool(image_tag.image_url)) %>
<% end %>
<% end %>
所以看起来@tools 里面没有任何值,但是当我在 dbconsole 中查看它时,那里有工具。我无法弄清楚这一点,过去几天我一直在谷歌上搜索答案,所以欢迎任何和所有想法!
编辑:添加 tools_controller.rb
class ToolsController < ApplicationController
before_filter :check_authentication
def check_authentication
unless session[:user_id]
session[:intended_action] = action_name
session[:intended_controller] = controller_name
redirect_to new_session_url
end
end
def new
@tool = Tool.new
respond_to do |format|
format.html # new.html.erb
format.json { render :json => @tool }
end
end
def show
end
def index
@tools = Tool.all
end
# GET /tools/1/edit
def edit
@tool = Tool.find(params[:id])
end
# POST /tools
# POST /tools.json
def create
@tool = Tool.new(params[:tool])
respond_to do |format|
if @tool.save
format.html { redirect_to @tool, :notice => 'tool was successfully created.' }
format.json { render :json => @tool, :status => :created, :location => @tool }
else
format.html { render :action => "new" }
format.json { render :json => @tool.errors, :status => :unprocessable_entity }
end
end
end
end