我正在尝试执行以下操作:
<%= order.user.try(:first_name) %>
<%= order.user.try(:last_name) %>
<%= order.user.try(:email) %>
但是,当我查看此页面的索引时,数据不会出现在表格中。我还查看了日志,发现相关数据正在发布
在2013-02-18 11:15:02 +0000开始发布127.0.0.1的POST / / orders OrdersController处理#create as HTML参数: { “UTF8”=&GT;, “?” “authenticity_token”=&gt; “中Rjf7 + Z8UAPh9ZofIrOs + p6AoGPfgd / 6rfdTRqJLtx0g =”, “user”=&gt; {“first_name”=&gt;“测试”,“last_name”=&gt;“TestHome”, “email”=&gt;“test@test.com”},“order”=&gt; {“address”=&gt;“3433234243”, “card_number”=&gt;“45423554213994”,“card_type”=&gt;“签证”, “card_expires_on(1i)”=&gt;“2013”,“card_expires_on(2i)”=&gt;“2”, “card_expires_on(3i)”=&gt;“1”},“提交”=&gt;“确认订单”}购物车加载 (0.0ms)SELECT
carts
。* FROMcarts
WHEREcarts
。id
= 8 LIMIT 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
为空。
获取数据的最佳方式是什么?
Order.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
User.rb
class User < ActiveRecord::Base
has_and_belongs_to_many :roles
has_many :role_users
has_many :orders
答案 0 :(得分:3)
你在说:
我理解这个错误的结果是因为first_name为空。
这不正确。错误的原因是用户是零。这也符合行为或try()
返回-blank - 。
确保您订购的用户已正确填充。这意味着您的订单表必须具有user_id,并且必须正确分配用户。
答案 1 :(得分:1)
你在这里比较两个不同的东西 - try
在你的视图中正常工作,当你在nil上调用它时返回nil(undefined method 'first_name' for nil:NilClass
是因为order.user是nil,不是因为first_name
是零。
这与您的POST无关 - 您在此尝试解决的实际问题是什么?
答案 2 :(得分: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 为空,但用户对象本身为 nil 。这意味着,您的@ order.user nil ,而 @ order.user.first_name 为空。
因此,order.user.try(:first_name)应该被读作打印放置此订单的用户的first_name,如果有一个用户与订单相关联,否则什么都不做但不扔任何错误
表单中的参数正在正确发送到您的控制器,可能是您在控制器中遗漏了与订单和用户记录相关联的内容。查看正在保存对象的控制器操作,并确保正确关联订单和用户。
希望这有帮助