从rails 4中的模型中检索连接表属性

时间:2015-02-05 05:22:14

标签: ruby-on-rails ruby-on-rails-4 many-to-many

所以我有一个Lessons,Users和Progresses模型如下。我试图展示" true"如果用户将课程标记为已完成(在课程显示页面上,最终也会为每个课程编制索引)。现在我只想让基础工作,因此在控制台中设置了属性。用户1有许多进展,查询旨在找到与当前课程ID和current_user id匹配的查询。到目前为止,我已经完成了一切,但是从模型中看不到current_user。我读到需要从控制器传递它。但控制器现在提供了一个未完成的方法`已完成'错误。我一直在阅读railsguides和其他SO问题,但似乎没有在这里得到一些东西。仍然是初学者,所以任何帮助/建议都表示赞赏。此外,如果这是一个迂回/糟糕的方式,请告诉我更多接受/ rails方式。

lesson.rb(。首先只是为了排除我尝试过的其他人)

has_many :progresses
has_many :users, :through => :progresses
def completed(user)
    self.progresses.where("lesson_id = self.id AND user_id = user.id}").first.completed
end

user.rb

has_many :progresses
has_many :lessons, :through => :progresses

progress.rb(有user_id,lesson_id,已完成:布尔值)

belongs_to :user
belongs_to :lesson

和lessons_controller.rb

def show
    @lesson = Lesson.find(params[:id])
    Lesson.completed(current_user) #Trying to make current_user available to model
end

教训#节目

<%= @lesson.completed %>

1 个答案:

答案 0 :(得分:0)

在@lesson上完成调用就像@lesson.completed(current_user)目前你在Lesson课上调用它一样,如果你想这样做就完成了一个类方法 通过添加自己完成

def self.completed(user) self.progresses.where(:user_id => user.id).first.completed end

然后你可以写

Lesson.completed(current_user)