2016-06-08 5 views
0

Я использую Rails 4.2.3 с базой PostGre. У меня есть объект с несколькими объектами-членами. В моем приложении/модели/my_object.rb файл, у меня естьNoMethodError undefined метод при попытке сохранить поле дочернего объекта

class MyObject < ActiveRecord::Base 
    belongs_to :user 
    has_many :my_object_times 
    has_one :address 
    attr_accessor :hour, :minute, :second 

    validates_numericality_of :overall_rank, :age_rank, :gender_rank 

    accepts_nested_attributes_for :my_object_times 
end 

Тогда, на мой взгляд, у меня есть это в моей форме ...

<%= f.fields_for :my_object_times do |rt| %> 
    <div class="field"> 
    <%= rt.label :overall_rank %><br> 
    <%= rt.text_field :overall_rank %> 
    </div> 

, но я получаю эту ошибку при подаче мою форму

NoMethodError (undefined method `overall_rank' for #<MyObject:0x007fd66df43968>): 
    app/controllers/my_objects_controller.rb:10:in `block in create' 
    app/controllers/my_objects_controller.rb:9:in `create' 

Я не понимаю, почему я получаю эту ошибку. Ниже мое приложение/контроллеры/my_objects_controller.rb файл

class MyObjectsController < ApplicationController 

    def create 
    @my_object = MyObject.new(my_object_params) 
    @current_user = User.find(session["user_id"]) 
    @my_object.user = @current_user 
    @date = Date.strptime(my_object_params[:day], "%m/%d/%Y") 
    @my_object.day = @date 
    respond_to do |format| 
     if @my_object.save 
     flash[:notice] = 'Saved successfully' 
     format.html { redirect_to controller: "users", action: "index", notice: 'Saved successfully.' } 
     format.js { render js: "window.location='/users'" } 
     else 
     format.html { render action: "index" } 
     format.js { render json: @my_object.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

Любая помощь приветствуется, - Дэйв

ответ

0

Хотя нет никакого кода для my_object_params частного метода, может быть, вы пропустите overall_rank в нем?

0

Вы не указали действие, для которого предназначен представление, но в соответствии с вашим кодом контроллера я предполагаю, что вы пытаетесь создать новый объект. Другими словами, html-код предназначен для нового действия.

При создании формы вы вызываете my_object_times внутри объекта, но его все еще не существует.

<%= f.fields_for :my_object_times do |rt| %> 
    <div class="field"> 
    <%= rt.label :overall_rank %><br> 
    <%= rt.text_field :overall_rank %> 
    </div> 
<% end %>