0

我正在尝试执行以下操作:

    <%= order.user.try(:first_name) %>
    <%= order.user.try(:last_name) %>
    <%= order.user.try(:email) %>

但是,当我查看此页面的索引时,这有效,数据不会出现在表中。我还查看了日志,看到正在发布相关数据

carts0 毫秒)选择.* 从carts哪里cartsid= 8 限制 1

所以我或者尝试做

    <%= order.user.first_name %>
    <%= order.user.last_name %>
    <%= order.user.email %>

这样做导致

NoMethodError in Orders#index

Showing C:/Users/sites/e-smart/app/views/orders/index.html.erb where line #18 raised:

undefined method `first_name' for nil:NilClass

我知道这个错误的结果是因为first_name是空的。

获取数据的最佳方法是什么。

订单.rb

class Order < ActiveRecord::Base
  attr_accessible :address, :card_expires_on, :card_type, :ip_address, :card_number, :first_mame, :last_name, :email, :quantity
  belongs_to :cart 
  has_many :line_items, :dependent => :destroy   
  belongs_to :user

用户.rb

class User < ActiveRecord::Base

  has_and_belongs_to_many :roles
  has_many :role_users
  has_many :orders
4

3 回答 3

3

你是说:

我了解此错误的结果是因为 first_name 为空。

这是不正确的。错误的原因是用户为零。这也符合行为或try()返回-blank-。

确保您有一个正确填写用户的订单。这意味着您的订单表必须有一个 user_id 并且必须正确分配用户。

于 2013-02-18T11:37:03.297 回答
1

你在这里比较两个不同的东西 -try在你看来它工作正常,当你在 nil 上调用它时它返回 nil (undefined method 'first_name' for nil:NilClass是因为 order.user 是 nil,而不是因为first_name它是 nil。

这与您的 POST 无关 - 您在这里尝试解决的实际问题是什么?

于 2013-02-18T11:33:55.397 回答
1

让我先澄清一下这个错误的含义。

  NoMethodError in Orders#index

  Showing C:/Users/sites/e-smart/app/views/orders/index.html.erb where line #18 raised:

  undefined method `first_name' for nil:NilClass

上述错误并不意味着user 的first_name为空,而是 user 对象本身为nil。这意味着,您的 @order.user 为nil而不是@order.user.first_name为空。

因此,如果有与订单关联的用户,则 order.user.try(:first_name) 应该被读取为打印下订单的用户的名字,否则什么都不做,但不抛出任何错误

The parameters in the form are being sent properly to your controller and may be you are missing something in the controller that associates the order and user records. Look into the controller action that is saving the object and make sure you are associating order and user properly.

Hope this helps

于 2013-02-18T11:41:02.767 回答