Rails:将变量分配给关联模型

时间:2016-03-20 15:41:04

标签: ruby-on-rails

嘿我正在尝试分配我的课程模型的一部分,并与我的用户模型相关联。

我有3个型号: - 用户 - 课程(标题:,currentprogress:) - UserCourseAssignment。 (关联表)

我可以通过输入User.courses来获取用户已分配的课程但是它不会让我更新变量

#<Course id: 6, title: "beginnerscourse", created_at: "2016-03-20 12:42:44",   
updated_at: "2016-03-20 12:42:44", reward1: nil, reward2: nil, reward3: nil,   
reward4: nil, reward5: nil, currentslide: 0, totalslides: nil>]> 

User = active_user   
User.courses.find(6).currentslide = 1 
User.save

对不起,如果我不清楚,更新了问题

2 个答案:

答案 0 :(得分:3)

您不应该将类名(<div id="grad1"></div>)指定为变量。在您的方案中,您只需使用User

active_user

当我写一个更好的解释为什么时,@ max回答了很好的解释,这里发生了什么。有关详细说明,请参阅his answer

如果您已经知道课程ID,那么他在使用active_user.courses.find(6).update_attributes(current_slide: 1) 时也是正确的。如果您已经知道ID,则无需从数据库加载所有current_user的课程。只需使用Course.find

,您就可以获得更好的性能

答案 1 :(得分:2)

User = active_user   
User.courses.find(6).currentslide = 1 
User.save

这里出现了很多问题。 User声明一个常量,它将掩盖你的User类!在Ruby中,任何以大写字母开头的标识符都是常量。

观看此示例:

User = active_user   
# somewhere else in the code
User.find(5) # NoMethodError wtf!?

此外,如果您知道课程的ID,则无需首先通过该用户:

course = Course.find(6)
course.update_attributes(currentslide: 1)

如果您希望将查询范围作为访问控制器的糟糕版本的当前用户,您可以这样做:

course = Course.where(user: current_user).find(6)