代码之家  ›  专栏  ›  技术社区  ›  Marcel B

Ruby on Rails中的表单:在模型中使用find和create by

  •  0
  • Marcel B  · 技术社区  · 7 年前

    “find_或_create_by”是我的问题的关键吗?

    不下面是另一个可行的建议。

    我接管了一个系统。它管理课程及其参与者。根据某种形式的课程,用户可以输入其个人数据,如姓名、工作地点(机构)等。

    相关表格:

    • 参与者

    当用户点击此表单中的enter时

    1. 应创建新参与者(id、person\u id、course\u id)
    2. 应该创建一个新的人(id、institution\u id、prename、姓氏等)
    3. 应该创建一个新机构(id、描述等)

    1. 创建了一个新机构(id、描述等)
    2. 使用正确的机构id(id、institution\u id等)创建一个新的人

    以下情况不起作用:

    我对Rails很陌生。但我猜在人模型(下面)中,定义 机构描述 导致在机构表和人员表(?)中创建记录。但我真的不确定。

    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
    

    课程id 课程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...
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   SteveTurczyn    7 年前

    建立关系 Person Course

    class Person < ActiveRecord::Base
      belongs_to :organization
      attr_accessible :institution_id,:title,:prename,:surname,:street,:street_number,:zip_code,:city,:phone,:fax,:email,:institution_description
      has_many :participants
      has_many :courses, through: :participants
    

    然后在控制器创建方法中,您可以执行以下操作。。。

    @person.courses << @course
    

    (假设您当前的课程在实例变量中,或者如果没有根据需要修改)

    这将自动创建 Participant 保存时记录 User