Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 未定义的方法“title';for nil:NilClass使用Rails进行敏捷Web开发_Ruby On Rails_Ruby_Undefined_Agile_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 未定义的方法“title';for nil:NilClass使用Rails进行敏捷Web开发

Ruby on rails 未定义的方法“title';for nil:NilClass使用Rails进行敏捷Web开发,ruby-on-rails,ruby,undefined,agile,ruby-on-rails-4,Ruby On Rails,Ruby,Undefined,Agile,Ruby On Rails 4,您好,我正试图从《使用Rails进行敏捷Web开发》一书中学习RoR,我遇到了以下错误: undefined method `title' for nil:NilClass <ul> <% @cart.line_items.each do |item| %> <li><%= item.quantity %> &times; <%= item.product.title %></

您好,我正试图从《使用Rails进行敏捷Web开发》一书中学习RoR,我遇到了以下错误:

undefined method `title' for nil:NilClass

    <ul>
        <% @cart.line_items.each do |item| %>
          <li><%= item.quantity %> &times; <%= item.product.title %></li>
        <% end %>
      </ul>
    app/views/carts/show.html.erb:4:in `block in _app_views_carts_show_html_erb___3275084074491266306_70111742218200'
    app/views/carts/show.html.erb:3:in `_app_views_carts_show_html_erb___3275084074491266306_70111742218200'
购物车型号:

class Cart < ActiveRecord::Base
  has_many :line_items, :dependent => :destroy

  def add_product(product_id)
    current_item = line_items.find_by_product_id(product_id)
    if current_item
      current_item.quantity = current_item.quantity.to_i + 1
    else
     current_item = line_items.build(:product_id => product_id)
    end
    current_item
  end
end
class购物车:销毁
def添加产品(产品id)
当前项目=行项目。按产品id(产品id)查找
如果是当前项目
当前_item.quantity=当前_item.quantity.to_i+1
其他的
当前\u项=行\u项.build(:product\u id=>product\u id)
结束
当前项目
结束
结束
我正在使用Ruby 2.0.0p247和Rails 4。
谢谢您的回答。

这可能是因为购物车项目模型不保存产品id

validates :product_id, presence: true
1) 首先,将验证添加到LineItem模型。它不会解决问题,但您将确保该问题与产品标识相关

validates :product_id, presence: true
2a)更新控制器以使用Rails 4强参数:

2b)或在学习Ruby On Rails时使用Rails 3

更新


您还应该使用rails控制台从DB中删除以前的行项目记录,否则您仍然会看到此错误,因为旧的行项目与产品不关联。

@gvalmon是正确的,但我建议尝试使用

验证:产品、状态:true

我会把你的产品代码至少改成这个

` def添加产品(产品id,数量=1)

结束 `


注意:别忘了将数量默认值更改为“0”

您的类别行项目是否有
所属\u至:产品
?@SteveTurczyn是的它有>类别行项目未定义的方法“find_或_initialize”for#提取的源代码(在第5行附近):3 4 5 6 7 8 def add_product(product_id,quantity=1)current_item=line_items.where(product_id:product_id)。find_或_initialize current_item.quantity+=quantity current_item.save current_item确定,我的错误不是find_或_initialize而是first_或_initialize。它来自rails 4。如果它不起作用,那么您应该为您的rails版本找到所需的方法。或者可以尝试
line_项。where(product_id:product_id)。first | line_项。where(product_id:product_id)。create
您能告诉我如何删除记录吗?@neor运行rails控制台(“rails c”)并销毁记录(“line项.销毁所有”)我销毁了数据库中的记录,将add_产品重新编写到以前的版本,现在可以使用了。非常感谢你!我真的很高兴Rails有这么一个了不起的社区。你们都帮了大忙。现在我将继续学习,再次感谢大家。
validates :product_id, presence: true
current_item = line_items.where(product_id: product_id).find_or_initialize
current_item.quantity += qty
current_item.save
current_item