好的,我想我有两个问题需要修复,,
我得到了以下表格:Student、Register和一个join表,该表显示1寄存器中有许多学生的记录,名为'Registers_Students‘,如下所示:

。
我必须通过Register_Students创建rails g migration CreateStudentRegister表,该表如下所示:
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_arrival或present属性,因为我希望设置它们。
我想为每个学生更改这些属性的方式是在register/show.html.erb中使用以下代码:
<% @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模型
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的另一个模型
class Register < ActiveRecord::Base
has_and_belongs_to_many :students
belongs_to :event
attr_accessible :date, :student_ids, :module_class_id, :event_id
end发布于 2013-03-09 21:56:18
更新您需要设置一个模型来访问registers_students表
该表名不遵循rails约定或常规系统,所以我可以建议您吗?
1)将db回滚1迁移(假设创建此表是最后一次迁移)
rake db:rollback
2)从db/迁移文件夹中删除迁移
3)使用内置的rails模型生成器。
rails g model student_register register_id:integer student_id:integer #etc现在迁移数据库,然后设置has_many和belongs_to关系,以便在视图中使用它们。
现在您将为每个学生提供一个student_registers数组,您可以循环遍历并访问End update上的当前字段。
1)
<td><%= Register.find(@register).present %></td> #Doesn't work您已经有了@register的一个实例,因此不需要再次读取数据库就可以找到相同的实例。只需在@寄存器对象上直接使用所需的属性即可。
<td><%= @register.present %></td>你的原始代码,尽管它是糟糕的设计,应该是有效的。
如果这样做不起作用,那么你有一个更根本的问题,不可能用你提供的小信息来猜测,所以请回来编辑你的问题,如果是这样的话,留下评论。
2)
同样的情况也适用于
<td><%= Register.find(@register).time_of_arrival %></td> #This doesn't work3)
因为你说这不管用
<td><%= student.time_of_arrival%></td> #Nor does this我开始怀疑您的声明不起作用,并表示它正在完美地工作,也许您在这些字段中没有数据可供显示。所以输入一些数据,一切都会很好。
4)使用rails助手在屏幕上编辑多条记录的主要方法有3种。我建议你读一读fields_for
作为for的起点
另外,看看这个http://railscasts.com/episodes/198-edit-multiple-individually瑞安贝茨已经做了其他铁路在这个主题,所以有一个拖网浏览该网站。
发布于 2013-03-09 22:49:37
您需要实现has_many :through关联。
有关此,请参阅rails指南,basics.html
https://stackoverflow.com/questions/15316114
复制相似问题