首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图访问连接表Rails中的属性

试图访问连接表Rails中的属性
EN

Stack Overflow用户
提问于 2013-03-09 21:27:46
回答 2查看 2.8K关注 0票数 2

好的,我想我有两个问题需要修复,

我得到了以下表格:StudentRegister和一个join表,该表显示1寄存器中有许多学生的记录,名为'Registers_Students‘,如下所示:

我必须通过Register_Students创建rails g migration CreateStudentRegister表,该表如下所示:

代码语言:javascript
复制
class CreateStudentRegister < ActiveRecord::Migration
    def change
    create_table :registers_students, :id => false do |t|
    t.integer  :register_id
    t.integer :student_id
    t.boolean :present
    t.time :time_of_arrival
  end
 end
end

现在,我希望每个注册中心都有一些学生,对于每个学生,我希望他们的present状态为真/假,每个学生也应该有一个time_of_arrival时间。但是,我无法访问time_of_arrivalpresent属性,因为我希望设置它们。

我想为每个学生更改这些属性的方式是在register/show.html.erb中使用以下代码:

代码语言:javascript
复制
<% @register.students.each do |student| %>
  <tr>
      <td><%= Register.find(@register).present %></td>         #Doesn't work
      <td><%= student.university_id%></td>
      <td><%= student.first_name.titlecase%></td>
      <td><%= student.last_name.titlecase%></td>
      <td><%= Register.find(@register).time_of_arrival %></td> #This doesn't work
      <td><%= student.time_of_arrival%></td>                   #Nor does this

  </tr>
  <% end %>
</table>

我希望它显示在show页面中的原因是,这样就可以编辑注册表,将学生标记为在场或缺席,并使用复选框标记他们到达的时间(该部分尚未实现,但如果你们中的任何人知道如何实现,我很想听听)。

谢谢各位事先给出的答案

编辑:添加模型

Students模型

代码语言:javascript
复制
class Student < ActiveRecord::Base
  has_and_belongs_to_many :registers
  validates :university_id, :length => { :minimum => 10}, #Checks that the University ID is 10 characters long
            :uniqueness => {:case_sensitive => false}, #Checks that the University ID is unique, regardless of case-sensitivity
        :format => { :with => /[wW]\d\d\d\d\d\d\d\d\d/, #University ID needs to be in the right format via regex
                     :message => "Needs to be in the right format i.e. w123456789"}

  default_scope :order => 'LOWER(last_name)' #Orders the students via last name
  attr_accessible :first_name, :last_name, :university_id

  def name
    first_name.titlecase + " " + last_name.titlecase
  end
end

这是Register的另一个模型

代码语言:javascript
复制
class Register < ActiveRecord::Base
  has_and_belongs_to_many :students
  belongs_to :event
  attr_accessible :date, :student_ids, :module_class_id, :event_id
end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-09 21:56:18

更新您需要设置一个模型来访问registers_students表

该表名不遵循rails约定或常规系统,所以我可以建议您吗?

1)将db回滚1迁移(假设创建此表是最后一次迁移)

rake db:rollback

2)从db/迁移文件夹中删除迁移

3)使用内置的rails模型生成器。

代码语言:javascript
复制
rails g model student_register register_id:integer student_id:integer #etc

现在迁移数据库,然后设置has_many和belongs_to关系,以便在视图中使用它们。

现在您将为每个学生提供一个student_registers数组,您可以循环遍历并访问End update上的当前字段。

1)

代码语言:javascript
复制
  <td><%= Register.find(@register).present %></td>         #Doesn't work

您已经有了@register的一个实例,因此不需要再次读取数据库就可以找到相同的实例。只需在@寄存器对象上直接使用所需的属性即可。

代码语言:javascript
复制
<td><%= @register.present %></td>

你的原始代码,尽管它是糟糕的设计,应该是有效的。

如果这样做不起作用,那么你有一个更根本的问题,不可能用你提供的小信息来猜测,所以请回来编辑你的问题,如果是这样的话,留下评论。

2)

同样的情况也适用于

代码语言:javascript
复制
  <td><%= Register.find(@register).time_of_arrival %></td> #This doesn't work

3)

因为你说这不管用

代码语言:javascript
复制
  <td><%= student.time_of_arrival%></td>                   #Nor does this

我开始怀疑您的声明不起作用,并表示它正在完美地工作,也许您在这些字段中没有数据可供显示。所以输入一些数据,一切都会很好。

4)使用rails助手在屏幕上编辑多条记录的主要方法有3种。我建议你读一读fields_for

作为for的起点

另外,看看这个http://railscasts.com/episodes/198-edit-multiple-individually瑞安贝茨已经做了其他铁路在这个主题,所以有一个拖网浏览该网站。

票数 2
EN

Stack Overflow用户

发布于 2013-03-09 22:49:37

您需要实现has_many :through关联。

有关此,请参阅rails指南,basics.html

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15316114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档