Ruby on rails 未定义的方法“课程id';对于#<;集合:{quot;7}>;

Ruby on rails 未定义的方法“课程id';对于#<;集合:{quot;7}>;,ruby-on-rails,set,session-variables,Ruby On Rails,Set,Session Variables,好的,我有一张课程表,学生表和注册表。我允许学生登录,他们的信息存储在会话变量中。他们可以搜索课程,选择他们想要的课程,将课程id放入会话变量中。然后,在他们将课程放入所选课程页面后,他们可以单击注册按钮注册课程。这应该从会话[:course]获取课程id,从会话[:student\u id]获取学生id,并将它们放入一个名为registrations的表中。课程id是一个集合,我知道我应该循环每个课程id并将其添加到表中,但我不能。我已经在下面发布了我的控制器,下面是文件 以下是控制器,其代码

好的,我有一张课程表,学生表和注册表。我允许学生登录,他们的信息存储在会话变量中。他们可以搜索课程,选择他们想要的课程,将课程id放入会话变量中。然后,在他们将课程放入所选课程页面后,他们可以单击注册按钮注册课程。这应该从会话[:course]获取课程id,从会话[:student\u id]获取学生id,并将它们放入一个名为registrations的表中。课程id是一个集合,我知道我应该循环每个课程id并将其添加到表中,但我不能。我已经在下面发布了我的控制器,下面是文件 以下是控制器,其代码将课程ID和学生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 %>


非常感谢您的帮助。

您不能在
会话中放置模型,因此您不能这样访问它们。您需要根据存放在那里的
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,而不保存课程本身。

您在控制器中的
@寄存器设置在哪里?首先,您使用=进行设置,而不是添加到集合(如果它确实是集合)。其次,如果你想全部显示,你需要在集合上循环。我希望粘贴的例子中
nill
是一个输入错误,因为关键字是
nil
。您对
while
的使用似乎也被破坏了,应该改为
if
,因为您没有循环:
if(session[:course].course\u id).
记住在以前的请求中设置
session[:course\u id]=@course.id
,或者任何存储课程的变量。