class Query < ActiveRecord::Base
#relations
has_one :r_job
accepts_nested_attributes_for :r_job
end
class RJob < ActiveRecord::Base
belongs_to :query
validates_presence_of :analysis_type, :if => lambda {|job| job.query.process_r_job}
end
私はクエリとr_jobを作成するためにネストされたフォームを持っています。私は、クエリオブジェクト内のブール値フィールドがあり、私は上記のコードでそれをしようとしているクエリオブジェクトのブール値に基づいてr_jobのいくつかのバリデーションを行う必要がありますが、私はメソッドのエラーを取得しています。親属性に基づいて子を検証する
NoMethodError (undefined method `process_r_job' for nil:NilClass):
app/models/r_job.rb:3:in `block in <class:RJob>'
app/controllers/queries_controller.rb:9:in `create'
Iビットに掘って、私はラムダ内部job.query
がnilオブジェクトを返して、発見しました。私はちょっとこれにこだわりました。これを解決するための助けが必要です。以下は私のフォームとコントローラのコードです。
# app/views/queries/new.html.haml
=form_for @query, {:html => {:class=>"form-horizontal"}}do |f|
- if @query.errors.any?
.alert.alert-error
%h4.alert-heading Error(s)!
- @query.errors.full_messages.each do |msg|
%p= msg
=render "query_form", :f => f
%fieldset
=f.fields_for :r_job do |builder|
=render "r_job_form", :f => builder
%button.btn.btn-primary.small Go
#app/controller/queries_controller.rb
class QueriesController < ApplicationController
def new
@query = Query.new
@query.build_r_job
end
def create
@query = Query.new(params[:query])
if @query.save
redirect_to root_path, :notice => "Yay!! Your query is running. You can download the CSV once the query finishes."
else
flash.now[:error] = "Oops, the query cannot be saved!!"
render :new
end
end
end
同様のことが行われているところで質問がありました。しかし何とか私はこの仕事を得ることができませんでした。 get parent values in child model
が重複する可能性を_for子の関連付けの検証に失敗しました](http://stackoverflow.com/questions/935650/accepts-nested-attributes-for-child-association-validation-failing) –