0

私は次のことをしようとしています:

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

これは機能しますが、このページのインデックスを表示すると、データがテーブルに表示されません。また、ログを表示したところ、関連するデータが投稿されていることがわかりました

carts0ms) SELECT .* FROM cartsWHERE carts. id= 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が空であるためだと理解しています。

これは正しくありません。エラーの原因は、ユーザーがnilであるということです。これは、動作またはtry()-blank-を返すこととも一致しています。

ユーザーが正しく入力された注文があることを確認してください。つまり、注文テーブルにはuser_idが必要であり、ユーザーは正しく割り当てられている必要があります。

于 2013-02-18T11:37:03.297 に答える
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

上記のエラーは、ユーザーのfirst_nameが空であることを意味するのではなく、ユーザー オブジェクト自体がnilです。@order.user が空ではなく、@order.user.first_name空であることを意味します。

したがって、 order.user.try(:first_name) は、注文に関連付けられたユーザーがいる場合は、この注文を出したユーザーの first_name を出力するものとして読み取られる必要があります。そうでない場合は、何もせず、エラーをスローしません。

フォームのパラメーターはコントローラーに適切に送信されていますが、注文とユーザー レコードを関連付けるコントローラーに何か不足している可能性があります。オブジェクトを保存しているコントローラ アクションを調べて、順序とユーザーを適切に関連付けていることを確認してください。

お役に立てれば

于 2013-02-18T11:41:02.767 に答える
1

ここで2つの異なることを比較しています-tryあなたのビューでは正しく機能していますundefined method 'first_name' for nil:NilClass.nilで呼び出すとnilが返されfirst_nameます.

これはあなたの POST とは無関係です。ここで解決しようとしている実際の問題は何ですか?

于 2013-02-18T11:33:55.397 に答える