Rails 3 Nested Form;UnknownAttributeError on New - PullRequest
1 голос
/ 04 января 2012

Rails 3.1, Ruby 1.87 (не ненавидь меня). Я смотрел Railscasts на вложенных формах; Я только добавил это, чтобы вы могли указать, где я мог что-то пропустить в Railscasts, если вы их знаете.

Примечание: я добавил @sample_data_set.build_sample_data_template, но вместо этого получил в сообщении "неизвестный атрибут: sample_data_set_id" [код также опубликован с новым ниже)

Использование вложенной формы в Create / New; нажмите Отправить и получите:

ActiveRecord :: UnknownAttributeError (неизвестный атрибут: sample_data_templates):
app / controllers / sample_data_sets_controller.rb: 50: in new'<br> app/controllers/sample_data_sets_controller.rb:50:in create '

Пример набора данных модели:

class SampleDataSet < ActiveRecord::Base
  has_one :sample_data_template, :dependent => :destroy
  accepts_nested_attributes_for :sample_data_template
end

Пример шаблона данных модели:

class SampleDataTemplate < ActiveRecord::Base
  belongs_to :sample_data_set
   #Random info generation
  def self.name_gen(*prepend)
    character_map =  [('a'..'z'),('A'..'Z')].map{|i| i.to_a}.flatten
    name  =  (0..8).map{ character_map[rand(character_map.length)]  }.join

    if prepend[0].nil? || prepend[0] == ""
      return name
    else
      return prepend[0].to_s + "_" + name
    end
  end

  def self.ssn_gen
    #broke this out as its own method in case someone wants some logic later one
    ssn = ""
    3.times do
      ssn = ssn + (100..999).to_a.choice.to_s
    end
    return ssn
  end

  def self.row_gen(row_count)
    @data_rows = Array.new
    i = 0
    until i > row_count do
      @row = SampleDataSet.first
      @row.officialFirstName  = SampleDataTemplate.name_gen
      @row.officialLastName   = SampleDataTemplate.name_gen
      @row.emailAddresses     = @row.officialFirstName + @row.officialLastName + "@aaa.aaa.edu"
      @row.ssn                = SampleDataTemplate.ssn_gen
      @data_rows << @row
      i += 1
    end

    return @data_rows
  end
end

Пример контроллера данных # Новый

  def new
    @sample_data_set = SampleDataSet.new
    @sample_data_set.build_sample_data_template #after adding this I get error:unknown attribute: sample_data_set_id     
    respond_to do |format|
      format.html # new.html.erb
      format.json { render :json => @sample_data_set }
    end

Пример контроллера данных # Создать

  def create
    @sample_data_set = SampleDataSet.new(params[:sample_data_set])

    respond_to do |format|
      if @sample_data_set.save
        format.html { redirect_to @sample_data_set, :notice => 'Sample data set was successfully created.' }
        format.json { render :json => @sample_data_set, :status => :created, :location => @sample_data_set }
      else
        format.html { render :action => "new" }
        format.json { render :json => @sample_data_set.errors, :status => :unprocessable_entity }
      end
    end
  end
  end

Обновление, добавлен кусок формы

  <div class="sample_fields">
    <%= f.fields_for :sample_data_templates do |builder| %>
      <%= render "sample_data", :f => builder%>
    <% end %>
  </div>

Обновление, схема:

ActiveRecord::Schema.define(:version => 20120103172936) do

  create_table "sample_data_sets", :force => true do |t|
    t.string   "title"
    t.text     "description"
    t.string   "created_for"
    t.string   "created_by"
    t.integer  "number_of_records"
    t.integer  "sample_data_template_id"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  create_table "sample_data_templates", :force => true do |t|
    t.integer  "sample_data_set_id"
    t.string   "irn"
    t.string   "ssn"
    t.string   "officialLastName"
    t.string   "officialFirstName"
    t.string   "emailAddresses"
    t.string   "campusNum"
    t.string   "internationalId"
    t.string   "internationalIdCountry"
    t.string   "gender"
    t.string   "officialMiddleInitial"
    t.string   "previousLastName"
    t.string   "previousFirstName"
    t.string   "previousMiddleInitial"
    t.string   "addressLine1"
    t.string   "addressLine2"
    t.string   "addressLine3"
    t.string   "city"
    t.string   "state"
    t.string   "zipCode"
    t.string   "province"
    t.string   "homeAreaCode"
    t.string   "homePhoneNumber"
    t.string   "homePhoneExtenstion"
    t.string   "homePhoneCountryCode"
    t.string   "workAreaCode"
    t.string   "workPhoneNumber"
    t.string   "workExtenstion"
    t.string   "workPhoneCountryCode"
    t.string   "faxAreaCode"
    t.string   "faxPhoneNumber"
    t.string   "faxExtension"
    t.string   "faxCountryCode"
    t.string   "race"
    t.string   "previousDegree"
    t.string   "region"
    t.string   "foreignTranscript"
    t.string   "apolloEmployee"
    t.string   "nursingLicenseExpiration"
    t.string   "nursingInsuranceExpiration"
    t.string   "otherInsuranceExpiration"
    t.string   "program"
    t.string   "version"
    t.string   "groupId"
    t.string   "team"
    t.string   "enrollmentUserId"
    t.string   "admissionsUserId"
    t.string   "oldProgram"
    t.string   "oldVersion"
    t.string   "galaxyStudentOid"
    t.string   "suffixOne"
    t.string   "suffixTwo"
    t.string   "employeId"
    t.string   "promoCode"
    t.string   "revCampusOid"
    t.string   "FerpaNotes"
    t.string   "isWavierHigh"
    t.string   "executingUserId"
    t.string   "totalDeclaredExtCredits"
    t.datetime "insuranceExpireDate"
    t.datetime "acknowledgementDate"
    t.datetime "scheduledReentryDate"
    t.datetime "scheduledStartDate"
    t.datetime "dateOfBirth"
    t.datetime "enrollAgreeSignDate"
    t.boolean  "usCitizen"
    t.boolean  "financialAid"
    t.boolean  "overrideFlag"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

end

1 Ответ

2 голосов
/ 04 января 2012

Есть ли в таблице sample_data_templates столбец sample_data_set_id? Возможно, вы не добавили его в миграцию или не запустили миграцию?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...