ruby-on-rails - 将对象保存在数组中的问题,Ruby 问题和 Rails 问题

标签 ruby-on-rails ruby arrays

我正在尝试将一个对象添加到我的数组中,但是该数组似乎总是重置,而不是添加。我究竟做错了什么?我认为这与 if(defined? libraryshelf) then 有关,我在这里要做的是找出数组是否存在(如果这是第一次添加或不存在)。 .

def add_book
  @listofbooks ||= Array.new
  @listofbooks.push(params[:booktitle])
  @listofbooks
  respond_to do |format|
    format.html { redirect_to(:back) }
    format.js
  end
end

我的 add_book.js.erb 文件

alert('<%= @listofbooks %>');

@listofbooks 只显示我上次添加的书名..

最佳答案

TL;DR: Controller 是无状态的,它们只看到传入的请求。要使列表比当前请求存活得更久,您需要将该列表保存在 session 或数据库中,具体取决于您希望它存活多长时间以及其他考虑因素。

还有一些其他问题...

不要为此使用defined?,事实上,不要为任何事情使用defined?。它没有很多合法的应用程序级用途。在这种情况下,libraryshelf 是一个局部变量,在方法中第一次引用它时,它始终不会被定义。

直接在@listofbooks上操作,只勾选@listofbooks or @listofbooks.nil?

这里有一些工作(我认为)的版本......

def add_book name
  @listofbooks = [] unless @listofbooks
  @listofbooks << name
end

def add_book name
  @listofbooks ||= []
  @listofbooks << name
end

def add_book name
  @listofbooks = @listofbooks.to_a.push name # yes, works even if @listofbooks.nil?
end

啊哈,你修改后的帖子更好了......如 TL;DR 中所述:因为 Rails 在每个请求上重新创建 Controller 对象,所以下次你需要在会​​话或数据库中保留任何你想要的东西。

原始帖子通过该方法每次破坏@listofbooks 来愚弄我们,所以我们认为这真的是一个 ruby​​ 问题。

关于ruby-on-rails - 将对象保存在数组中的问题,Ruby 问题和 Rails 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4835536/

相关文章:

ruby - Mechanize links_with 没有正确过滤文本

c# - 具有不同数据类型数组作为值的字典

ruby-on-rails - Rails 缺少测试/单元。它在哪里?

ruby-on-rails - 如何在生产服务器中升级 rvm 和 ruby​​ 版本

ruby-on-rails - 工厂女孩/Rspec - "Trait Not Registered"错误

ruby - 部署到 heroku 的 Watir 应用程序

php - MySQL从多个相同的表中选择查询并确定结果中的表

c++ - 为什么我的程序会跳过第一个函数? (初级 C++)

ruby-on-rails - 我做的符号对吗?

html - Rails 迁移似乎不起作用?不小心将列命名为 "type",运行迁移但收到错误