从 rails 中的模型检索联接 table 属性 4

Retrieving join table attribute from model in rails 4

所以我有一个课程、用户和进度模型,如下所示。如果用户将课程标记为已完成(在课程显示页面上,最终也会为每节课建立索引),我会尝试显示 "true"。现在我只想让基础工作,因此在控制台中设置了属性。用户 1 有很多进度,查询的目的是找到与当前课程 ID 和 current_user id 匹配的进度。到目前为止,我无法从模型中看到 运行 但 current_user 的所有内容。我读到它需要从控制器传递。但是控制器现在给出了一个未定义的方法“完成”错误。我四处阅读 railsguides 和其他 SO 问题,但似乎没有得到这里的东西。仍然是初学者,所以任何 help/suggestions 都表示赞赏。同样,如果这是 roundabout/bad 的方法,请告诉我更多 accepted/rails 的方法。

lesson.rb(.first只是为了排除我试验过的其他人)

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、completed:boolean)

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

课程#show

<%= @lesson.completed %>

调用在@lesson 上完成,比如 @lesson.completed(current_user) 目前你在 Lesson class 上调用它,如果你想这样做的话 make completed a class 方法 通过将 self 添加到 completed

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

然后你可以写

Lesson.completed(current_user)