【问题标题】:NoMethodError undefined method when trying to save field of a child objectNoMethodError 尝试保存子对象的字段时未定义的方法
【发布时间】:2016-10-08 23:20:33
【问题描述】:

我正在使用带有 PostGre 数据库的 Rails 4.2.3。我有一个有几个成员对象的对象。在我的 app/models/my_object.rb 文件中,我有

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'

我不明白为什么会出现此错误。下面是我的 app/controllers/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

感谢任何帮助,-戴夫

【问题讨论】:

    标签: ruby-on-rails-4 model controller has-many


    【解决方案1】:

    虽然您的 my_object_params 私有方法没有代码,但也许您错过了其中的 overall_rank

    【讨论】:

      【解决方案2】:

      您没有指定视图的操作,但根据您的控制器代码,我假设您正在尝试创建一个新对象。换句话说,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 %>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多