Ruby on rails Rails 3的问题有很多:通过关联和视图/表单

Ruby on rails Rails 3的问题有很多:通过关联和视图/表单,ruby-on-rails,activerecord,associations,Ruby On Rails,Activerecord,Associations,我以前在我的旧Rails应用程序中使用了很多has_和_-allown_-to_关联,但现在正在使用has_-many,:到新的和当前的应用程序。然而,我相信我错过了很多重要的东西:通过Rails 3中的关联 目前,我正在为我们镇的志愿消防部门开发一个应用程序。当我们开会时,我们想检查一下消防队员是否在场、是否可以原谅或缺席 我的模型: #FireFighter Model class FireFighter < ActiveRecord::Base has_many :attendanc

我以前在我的旧Rails应用程序中使用了很多has_和_-allown_-to_关联,但现在正在使用has_-many,:到新的和当前的应用程序。然而,我相信我错过了很多重要的东西:通过Rails 3中的关联

目前,我正在为我们镇的志愿消防部门开发一个应用程序。当我们开会时,我们想检查一下消防队员是否在场、是否可以原谅或缺席

我的模型:

#FireFighter Model
class FireFighter < ActiveRecord::Base
has_many :attendance_meetings
has_many :meetings, :through => :attendance_meetings
accepts_nested_attributes_for :meeting

#Meeting Model
class Meeting < ActiveRecord::Base
has_many :attendance_meetings
has_many :fire_fighters, :through => :attendance_meetings
accepts_nested_attributes_for :fire_fighter

#AttendanceMeeting Model
class AttendanceMeeting < ActiveRecord::Base
attr_accessor :status # this is the added property on the join model that we need populated
belongs_to :fire_fighter
belongs_to :meeting
这将为每名消防员吐出三个单选按钮(包括出席、免责或缺席选项)。但是,生成的单选按钮的名称都是相同的,因此您只能为所有消防员选择一个


正如我上面提到的,我确信我遗漏了一些基本的东西,但我被难住了。我已经在ActiveRecord上阅读了大量的SO问题和Rails 3-Way手册的章节。如有任何建议或指示,将不胜感激。谢谢大家!

应该是这样的:

class Meeting < ActiveRecord::Base
  has_many :attendance_meetings
  has_many :fire_fighters, :through => :attendance_meetings
  accepts_nested_attributes_for :attendance_meetings

# view
= form_for @meeting do |f|
  = f.fields_for :attendance_meetings do |f_a_m|
    = f_a_m.object.fire_fighter.name
    = f_a_m.check_box :status, 'present'
    = f_a_m.check_box :status, 'excused'
    = f_a_m.check_box :status, 'absent'
@meeting.firefighters << Firefighter.all
课堂会议:出席会议
接受\u嵌套的\u属性\u用于:出席\u会议
#看法
=表格U表示@meeting do | f|
=f.字段_用于:出席| f(a)m|
=f_a_m.object.fire_fighter.name
=f_a_m.复选框:状态“当前”
=f_a_m.复选框:状态“已免除”
=f_a_m.复选框:状态“缺席”
对于您正在采取的方法,您需要为每个消防员与会议建立关联。比如:

class Meeting < ActiveRecord::Base
  has_many :attendance_meetings
  has_many :fire_fighters, :through => :attendance_meetings
  accepts_nested_attributes_for :attendance_meetings

# view
= form_for @meeting do |f|
  = f.fields_for :attendance_meetings do |f_a_m|
    = f_a_m.object.fire_fighter.name
    = f_a_m.check_box :status, 'present'
    = f_a_m.check_box :status, 'excused'
    = f_a_m.check_box :status, 'absent'
@meeting.firefighters << Firefighter.all

@meeting.firefors应该是这样的:

class Meeting < ActiveRecord::Base
  has_many :attendance_meetings
  has_many :fire_fighters, :through => :attendance_meetings
  accepts_nested_attributes_for :attendance_meetings

# view
= form_for @meeting do |f|
  = f.fields_for :attendance_meetings do |f_a_m|
    = f_a_m.object.fire_fighter.name
    = f_a_m.check_box :status, 'present'
    = f_a_m.check_box :status, 'excused'
    = f_a_m.check_box :status, 'absent'
@meeting.firefighters << Firefighter.all
课堂会议:出席会议
接受\u嵌套的\u属性\u用于:出席\u会议
#看法
=表格U表示@meeting do | f|
=f.字段_用于:出席| f(a)m|
=f_a_m.object.fire_fighter.name
=f_a_m.复选框:状态“当前”
=f_a_m.复选框:状态“已免除”
=f_a_m.复选框:状态“缺席”
对于您正在采取的方法,您需要为每个消防员与会议建立关联。比如:

class Meeting < ActiveRecord::Base
  has_many :attendance_meetings
  has_many :fire_fighters, :through => :attendance_meetings
  accepts_nested_attributes_for :attendance_meetings

# view
= form_for @meeting do |f|
  = f.fields_for :attendance_meetings do |f_a_m|
    = f_a_m.object.fire_fighter.name
    = f_a_m.check_box :status, 'present'
    = f_a_m.check_box :status, 'excused'
    = f_a_m.check_box :status, 'absent'
@meeting.firefighters << Firefighter.all

@meeting.com谢谢!我很欣赏大家的反应,现在正在尝试这种方法。我一直认为我参加了错误的协会(消防队员诉出席会议)。不幸的是,这对我不起作用,但我相信,我的模型有点不对劲。再次感谢你,马克。我遇到的主要问题是,在迭代的字段_中,它会在=f_a_m.object.fire_fighter.xxx上出错(未找到fire_fighter的方法)。基本上,它没有看到任何物体。如果我试图输出对象(f_a_m.object.to_s或在调试时使用断点),则不会显示任何内容。最后,我在表单视图和会议控制器中找到了一个解决方法,但我仍然觉得我缺少了一些管理has__很多的核心内容:通过关系。不过没什么大不了的。。。只是需要更多的阅读:)对不起,我的答案中包含了一个错误;字段应为多个(复数)出席会议。检查编辑。现在进展顺利,马克。再次感谢你,并为忘记了你的答案而道歉。。。今天早上修正了这个错误:)。谢谢!我很欣赏大家的反应,现在正在尝试这种方法。我一直认为我参加了错误的协会(消防队员诉出席会议)。不幸的是,这对我不起作用,但我相信,我的模型有点不对劲。再次感谢你,马克。我遇到的主要问题是,在迭代的字段_中,它会在=f_a_m.object.fire_fighter.xxx上出错(未找到fire_fighter的方法)。基本上,它没有看到任何物体。如果我试图输出对象(f_a_m.object.to_s或在调试时使用断点),则不会显示任何内容。最后,我在表单视图和会议控制器中找到了一个解决方法,但我仍然觉得我缺少了一些管理has__很多的核心内容:通过关系。不过没什么大不了的。。。只是需要更多的阅读:)对不起,我的答案中包含了一个错误;字段应为多个(复数)出席会议。检查编辑。现在进展顺利,马克。再次感谢你,并为忘记了你的答案而道歉。。。今早已修复该错误:)。