Ruby on rails 使用Ruby获取方法错误";命名错误:未定义的方法'each';对于nil:NilClass“;

Ruby on rails 使用Ruby获取方法错误";命名错误:未定义的方法'each';对于nil:NilClass“;,ruby-on-rails,ruby,Ruby On Rails,Ruby,这个应用程序的作用是获取物品的市场价格。我不小心删除了database.db,从那以后,同样的错误一直出现。我想知道代码出了什么问题。也许我忽略了代码的某些部分 问题似乎出在index.erb文件中 App.rb 需要“捆绑机/设置” 捆绑机 如果开发需要“sinatra/重新装载机”? 需要“打开uri” 需要“sinatra/json” 需要“uri” 需要“json” 需要“./models/bookmark.rb” #需要“./models.rb” 启用:会话 发布“/注册”吗 @use

这个应用程序的作用是获取物品的市场价格。我不小心删除了database.db,从那以后,同样的错误一直出现。我想知道代码出了什么问题。也许我忽略了代码的某些部分

问题似乎出在index.erb文件中

App.rb
需要“捆绑机/设置”
捆绑机
如果开发需要“sinatra/重新装载机”?
需要“打开uri”
需要“sinatra/json”
需要“uri”
需要“json”
需要“./models/bookmark.rb”
#需要“./models.rb”
启用:会话
发布“/注册”吗
@user=user.create(邮件:params[:mail],密码:params[:password],
密码确认:参数[:密码确认])
如果@user!=无
会话[:user]=@user.id
结束
重定向“/”
结束
post'/签名'do
用户=用户。通过邮件查找(参数[:邮件])
如果用户&&user.authenticate(参数[:密码])
会话[:user]=user.id
结束
重定向“/”
结束
获取“/注销”操作
会话[:用户]=nil
重定向“/”
结束
获取“/”do
userid=会话[:user]
如果userid==nil
重定向“/home”
其他的
@user=user.find\u by\u id(userid)
@bookmark=@user.bookmarks
结束
雇员再培训局:1倍
结束
开始
userid=会话[:user]
如果userid==nil
重定向“/home”
其他的
@user=user.find\u by\u id(userid)
@bookmarks=@user.bookmarks
结束
=结束
得到/签署
雇员再培训局:签名
结束
得到/注册做什么
雇员再培训局:报名
结束
#获取“/”do
#@bookmarks=Bookmark.all
#雇员再培训局:索引
#结束
发布“/create”do
url1=参数[:url]
url2=URI.escape(url1)
priceurl=Nokogiri::HTML.parse(打开http://steamcommunity.com/market/search?appid=730&q=“+url2))
erlength=priceurl.css(“#searchResultsRows”).text
如果长度>150
priceurl2=p priceurl.search(“#resultlink_0”)[0]。属性[“href”].text
texturel=priceurl2[46..-1]
其他的
重定向“/”
结束
重定向'/api/site?url='+Texture
结束
获取“/api/site”do
rawurl=params[:url]
url1=URI.escape(rawurl)
#url2=URI.escape(url1)
logger.info网址
价格=未结('http://steamcommunity.com/market/priceoverview/?currency=1&appid=730&market_hash_name='+url1)。请阅读
data=JSON.load(价格)
价格检查=数据[“中间价”]
#priceooo=价格支票[1..6]
imagerine=Nokogiri::HTML.parse(打开https://steamcommunity.com/market/listings/730/“+url1”)
imagebomb=imagerine.at_css('.market_listing_largeimage img')['src']
图像=“”
html=Nokogiri::html.parse(打开https://steamcommunity.com/market/listings/730/“+url1”)
title=html.css('title')。文本
titles=title.sub(/^Steam社区市场::针对/,''的列表)
Bookmark.create(标题:标题,url:“平均价格:”+pricecheck,pricecheck:images,user\u id:session[:user])
重定向“/”
结束
post'/delete/:id'do
Bookmark.find(params[:id]).destroy
重定向“/”
结束
post'/usercreateauth'do
Bookmark.create(标题:params[:password],url:params[:username])
#重定向“/”+参数[:用户名]
结束
得到“/回家”做什么
雇员再培训局:家
结束
部分index.erb 这就是问题的根源。 出于某种原因,“每个”不再是一种方法

<div class="main">

    <div id="app">  
    <h4>Input the item's name into the box</h4>
    <p>Ex: Awp Asiimov Well Worn,  </p>
    <div style="height:20vh; overflow:hidden;"><img style="width:20vw;" src="/name.png"/></div>
    <form action="/create" method="post" id="frm" class="">
 <!--label for="url">Hash Value</label>
 <input  name="url" id="url"-->
 <label for="url">Item Name</label>
 <input  name="url" id="url">
 <input type="submit" value="Submit" name="commit" class="btn btn-primary submit"></input>
 </form>
 <br>

 <div class="container-fluid">

 <div class="row">
 <% @bookmarks.each do |bookmark| %>
 <div class="containerbox">
<p><%= bookmark.pricecheck%></p>
 <p><%= bookmark.title %><b id="price"><%= bookmark.url %></b></p>

 <span>
 <form action="/delete/<%= bookmark.id %>" method="post">
 <input class="delete" type="submit" value="x">
 </form>
 </span>

 </div>
 <% end %>

在框中输入项目的名称
例:Awp Asimov磨损严重

项目名称

Bookmark.rb
ActiveRecord::Base.building_连接(ENV['DATABASE_URL']| |“sqlite3:db/development.db”)
类书签
Schema.rb
ActiveRecord::Base.building_连接(ENV['DATABASE_URL']| |“sqlite3:db/development.db”)
类书签
我注意到在你的
App.rb
中有一行
@bookmark=@user.bookmarks
。请注意,
@bookmark
是单数。然后在视图模板中尝试运行
@bookmarks.each
(复数=完全不相关的实例变量名)。如果代码无法识别名称
@bookmarks
,则对象将默认为
nil
,该对象不理解方法
。每个
。仔细检查变量名!,这是一个常见的错误源,而这个特定的错误(“Nil::NilClass上的未知方法[some method name])是Rails开发中非常常见的错误


更一般地说,我觉得你的
App.rb
文件的格式很奇怪。它似乎同时充当
路由.rb
(将每个URL路由连接到控制器操作)和控制器(接收请求输入并准备视图正确呈现所需的所有变量)的角色。您的应用程序采用这种结构有什么原因吗?如果没有,我强烈建议您熟悉Rails的路由和控制器标准结构;这两段代码通常被保存在不同的地方,这有很好的理由。(除其他事项外,它可能会使类似这样的错误更容易排除!)

我假设该行是
@bookmarks。每个
?这很奇怪,因为
@bookmarks=@user.bookmarks
应该返回一个空数组
[]
,如果用户没有书签。您能否在控制台中运行初始化代码并检查
@书签的值是多少?当然,除非呈现
index.erb
的执行路径根本不初始化
@bookmarks
。。这可能就是问题所在。谢谢回复!什么是初始化代码?我的意思是-在出现错误的场景中,运行controlle
<div class="main">

    <div id="app">  
    <h4>Input the item's name into the box</h4>
    <p>Ex: Awp Asiimov Well Worn,  </p>
    <div style="height:20vh; overflow:hidden;"><img style="width:20vw;" src="/name.png"/></div>
    <form action="/create" method="post" id="frm" class="">
 <!--label for="url">Hash Value</label>
 <input  name="url" id="url"-->
 <label for="url">Item Name</label>
 <input  name="url" id="url">
 <input type="submit" value="Submit" name="commit" class="btn btn-primary submit"></input>
 </form>
 <br>

 <div class="container-fluid">

 <div class="row">
 <% @bookmarks.each do |bookmark| %>
 <div class="containerbox">
<p><%= bookmark.pricecheck%></p>
 <p><%= bookmark.title %><b id="price"><%= bookmark.url %></b></p>

 <span>
 <form action="/delete/<%= bookmark.id %>" method="post">
 <input class="delete" type="submit" value="x">
 </form>
 </span>

 </div>
 <% end %>
   ActiveRecord::Base.establish_connection(ENV['DATABASE_URL']||"sqlite3:db/development.db")
class Bookmark < ActiveRecord::Base
 belongs_to :user
end

unless ENV['RACK_ENV'] == 'production'
 ActiveRecord::Base.establish_connection("sqlite3:db/development.db")
end

class User < ActiveRecord::Base
 has_many :bookmarks
 has_secure_password
 validates :password,
 length: {in: 1..10}
end
ActiveRecord::Base.establish_connection(ENV['DATABASE_URL']||"sqlite3:db/development.db")
class Bookmark < ActiveRecord::Base
 belongs_to :user
end

unless ENV['RACK_ENV'] == 'production'
 ActiveRecord::Base.establish_connection("sqlite3:db/development.db")
end

class User < ActiveRecord::Base
 has_many :bookmarks
 has_secure_password
 validates :password,
 length: {in: 1..10}
end