【发布时间】:2017-09-18 15:43:59
【问题描述】:
“find_or_create_by”是解决我问题的关键吗?
回答不!下面是另一个可行的建议。
我接管了一个系统。它管理课程及其参与者。按照课程的形式,用户可以输入自己的个人数据,如姓名、工作地点(机构)等。
相关表:
- 课程
- 参与者
- 人
- 机构
当用户点击进入这个表单时
- 应创建一个新参与者(id、person_id、course_id)
- 应该创建一个新人(id、institution_id、prename、surname 等)
- 应该创建一个新机构(ID、描述等)
以下确实有效
当用户点击回车时:
- 创建了一个新机构(ID、描述等)
- 使用正确的机构 ID(id、institution_id 等)创建了一个新人
以下不起作用:
- 未创建新的对应参与者(id、person_id、course_id)
我对 Rails 很陌生。但我猜在人模型中(下)def institution_description 导致在机构表和人员表(?)中创建记录。但我真的不确定。
Person 模型代码
class Person < ActiveRecord::Base
belongs_to :institution
attr_accessible :institution_id,:title,:prename,:surname,:street,:street_number,:zip_code,:city,:phone,:fax,:email,:institution_description
has_many :participants
def institution_description
institution.description if institution
end
def institution_description=(description)
self.institution = Institution.find_or_create_by_description(description) unless description.blank?
end
我的想法是我可以在参与者模型 (?) 中使用类似的定义,例如 course_id。如果给定了 course_id,则创建参与者。但我不确定如何正确使用 course_id(如果这甚至可以这样工作)
参与者模型代码
class Participant < ActiveRecord::Base
belongs_to :course
belongs_to :function
has_one :person
attr_accessible :course_id, :function_id, :person_id, course_id
def course_id
participant.course_id if participant
end
def course_id=(course_id)
self.participant = Participant.find_or_create_by_course_id(course_id) unless trial_id.blank?
end
表单代码
<%= form_for(@person) do |f| %>
<fieldset>
<div class="table">
<div class="tr">
<div class="th">
<%= f.label t(:institution) %>
</div>
<div class="tdsep">:</div>
<div class="td">
<%= f.autocomplete_field :institution_description, autocomplete_institution_description_persons_path %>
</div>
</div>
<div class="tr">
<div class="th">
<%= f.label t(:title) %>
</div>
<div class="tdsep">:</div>
<div class="td">
<%= f.text_field :title %>
</div>
</div>
<div class="tr">
<div class="th">
<%= f.label :prename, t(:prename_html, :url => Rails.configuration.staffsearch) %>
</div>
<div class="tdsep">:</div>
<div class="td">
<%= f.text_field :prename %>
</div>
</div> #etc...
【问题讨论】:
标签: ruby-on-rails forms model rails-activerecord