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