使用self来获取模型中的当前对象,rails

时间:2012-05-25 06:52:21

标签: ruby-on-rails model self

我想知道是否有可能在模型中获取当前对象?即我有一个

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应该是我试图获取的值,以便我可以在之后获得用户

感谢您的帮助和时间

@Update。

因此我基本上在用户喜欢某人课程时尝试授予“徽章”。我有..

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。也许它还没有在数据库中创建它?像一毫秒太快?收藏是异步发生的。

我是否需要设置更多关联?

1 个答案:

答案 0 :(得分:2)

那么,self.lesson.inspect会返回什么? nilNoMethodError? 向我们展示您的迁移并检查数据库中的实际内容。 这可能是您的关系只是缺少课程的链接(lesson_id为NULL)...