1

私のコントローラーでは、2 つの異なるインスタンス変数の結果を 1 つのインスタンス変数にマージしていますが、次のエラーが発生しました。

undefined method `<<' for nil:NilClass

これが私のコントローラーコードです

  @conversational = InterestType.where("institution_id = ? or global = ? and category_id = ?", current_user.profile.institution_id, true, 1).first

    @commercial = InterestType.where("institution_id = ? or global = ? and category_id = ?", current_user.profile.institution_id, true, 2).limit(17)

    @user_interest_types << @conversational

    @user_interest_types << @commercial

どうすればこのエラーを乗り越えることができますか、または次の結果を得るための良い方法は何ですか.

  1. 最初に会話の興味タイプを表示し、次に他の 17 の商業的興味タイプを表示したいと考えています。
4

2 に答える 2

4

配列に追加する場合は、2 つのオプションがあり、ここでは追加する内容に注意する必要があります。

# Define an empty array
@user_interest_types = [ ]

# Add a single element to an array
@user_interest_types << @conversational

# Append an array to an array
@user_interest_types += @commercial

両方の操作に使用すると、配列<<配列にプッシュすることになり、結果の構造には複数のレイヤーが含まれます。結果を呼び出すと、これを確認できます。inspect

于 2012-06-28T14:07:19.923 に答える
0

ネストされた配列が必要な場合:

@user_interest_types = [@conversational, @commercial]

# gives [it1, [it2, it3, it4]]

または、フラットな配列を好む場合:

@user_interest_types = [@conversational, *@commercial]

# gives [it1, it2, it3, it4]

仮定@conversational = it1し、@commercial = [it2, it3, it4]

于 2012-06-28T14:13:17.000 に答える