【问题标题】:undefined method `course_id' for #<Set: {"7"}>#<Set: {"7"}> 的未定义方法 `course_id'
【发布时间】:2012-02-07 01:17:59
【问题描述】:

好的,我有一个课程、学生和注册表。我允许学生登录,他们的信息存储在会话变量中。他们可以搜索课程,选择他们想要的课程,将 course_id 放入会话变量中。然后在他们将课程放入choice_courses页面后,他们可以单击注册按钮为课程注册。这应该从 session[:course] 中获取 course_id 和从 session[:student_id] 中获取 student_id,并将它们放入一个名为 registrations 的表中。 course_id 是一个集合,我知道我应该遍历每个 course_id 并将其添加到表中,但我做不到。我已经在下面发布了我的控制器,这里是文件THE FILES ARE HERE!!!! 这是带有代码的控制器,该代码将 COURSE_ID 和 STUDENT_ID 从会话中放入数据库中:

  def show 
  @register = Registration.new
  while session[:course].course_id != nill do             
      @register.student_id = session[:student_id].student_id
      @register.course_id = session[:course].course_id       
  end     
   @register.save
  end

这里是显示注册数据库中数据的视图:

<% @register.each do |register| %>
<tr>
   <td><%= register.student_id %></td>
   <td><%= register.course_id %></td>
</tr>
<% end %>

感谢任何帮助。

【问题讨论】:

  • 你在控制器哪里设置@registers
  • 首先,如果它真的是一个集合,你使用 = 而不是添加到集合中。其次,如果要全部显示,则需要循环遍历集合。
  • 我希望 nill 是粘贴示例中的拼写错误,因为关键字是 nil。您对while 的使用似乎也被破坏了,应该是if,因为您没有循环:if (session[:course].course_id) ...

标签: ruby-on-rails set session-variables


【解决方案1】:

您不能将模型放在您的 session 中,因此您不能像那样访问它们。您需要根据其中隐藏的id 加载所需的任何内容。

这就是我认为你的目标:

def show 
  @register = Registration.new

  if (session[:course_id])
    if (course = Course.find_by_id(session[:course_id]))
      @register.student_id = course.student_id
      @register.course = course
    end
  end

  @register.save
end

确保在会话中只保存课程 ID,而不是课程本身。

【讨论】:

  • 记得在之前的请求中设置session[:course_id] = @course.id,或者任何存储课程的变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-18
  • 2023-03-15
  • 2011-10-14
  • 1970-01-01
相关资源
最近更新 更多