1

モデル内の現在のオブジェクトを取得できるかどうか疑問に思っていましたか?つまり、私は

FavoriteRelationshipモデル

belongs_to :user
belongs_to :lesson

私のレッスンモデルは

has_many :favorite_relationships
has_many :users, :through => :favorite_relationships

ユーザーモデルとも関連付けられています(重要ではありません)

私のFavoriteRelationship内でメソッドを実行しようとしています

def lesson_owner
    self.lesson.user
end

FavoriteRelationshipでそのレッスンに属するユーザーを取得しますが、機能していないようです。私がやっても何も返さない

self.lesson.inspect

FavoriteRelationshipモデルにあるレッスンでさえ取得することは機能していません。誰かがこれを行う方法に光を当てることができますか?

私は基本的に、FavoriteRelationshipモデルに関連するレッスンが必要です。私のFavoriteRelationshipテーブルには、属性があります。

:id, :user_id, :lesson_id.

:lesson_idは、取得しようとしている値である必要があります。これにより、後でユーザーを取得できます。

あなたの助けと時間をありがとう

@アップデート。

したがって、基本的に、ユーザーが他の誰かのレッスンをお気に入りに追加したときに「バッジ」を付与しようとすることを使用しています。私は持っています..

def create
    @lesson = Lesson.find(params[:favorite_relationship][:lesson_id])
    puts 'before favorite'
    current_user.favorite!(@lesson) 
    puts 'after favorite'
    @favorite_relationship = @lesson.user    
    respond_to do |format|
      format.html { redirect_to @lesson }
      format.js
    end
end

私のバッジの付与は...

    grant_on 'favorite_relationships#create', :badge => 'got-favorited',
         :to => :lesson_owner

これは、誰に許可するかを返すメソッドを取ります。そのため、私はそのメソッドを作成しました。

私がする時

puts self.lesson.inspect

何も出てこない、ゼロでも何でもない。私の好みが機能することを知っています、それはデータベースに関係を作成します。私が考えた唯一のことは、関係が作成される前にバッジを付与しようとすることです。うーん...私はprintステートメントを入れましたが、create_favorite_relationshipが呼び出されて戻った後、lesson_ownerに入ったようです。多分それはまだデータベースに作成されていませんか?ミリ秒が速すぎるように?優先は非同期で行われます。

さらにいくつかの関連付けを設定する必要がありますか?

4

1 に答える 1

2

それで、これは何をself.lesson.inspect返しますか?nilまたはNoMethodError?移行を見せて、実際にデータベースにあるものを確認してください。これは、あなたの関係がレッスンへのリンクを欠いている可能性があります ( lesson_idis NULL)...

于 2012-05-25T08:50:57.627 に答える