2016-01-13 5 views
-1

У меня есть модель в моем рельсе, которую has_many answers. При попытке сохранить как sale_qualifier, так и answer я получаю ошибку Answers sale_qualifier can't be blank, и я не могу решить, в чем проблема, поскольку у меня эти вложенные атрибуты работают в других формах приложения.Вложенная модель поля, не сохраняющая родительскую ассоциацию в Rails

SaleQualifier показан на SalesOpportunity страницы, поэтому я сначала определить это в действии: SalesOpportunity show

def show 
    @sales_opportunity = SalesOpportunity.includes(:company, :user, :timeline_events, :sale_contacts, :swots, :sale_competitors).find(params[:id]) 
    @sale_qualifier = SaleQualifier.new(sales_opportunity_id: params[@sales_opportunity.id]) 
    @answer = @sale_qualifier.answers.build 
end 

Как вы можете видеть, что я строй ассоциации в шоу-контроллере, который должен затем обновить через действие SaleQualifier create. В контроллере SaleQualifier я установил следующее:

def sale_qualifier_params 
    params.require(:sale_qualifier).permit(:question_id, :answer_id, :next_question_id, :answered, :sales_opportunity_id, answers_attributes: [:answer_text, :sale_qualifier_id]) 
    end 

Мой Продажа Классификатор код:

class SaleQualifier < ActiveRecord::Base 
has_many :answers, :inverse_of => :sale_qualifier 
accepts_nested_attributes_for :answers 
belongs_to :sales_opportunity 
validates :sales_opportunity_id, presence: true 
end 

Мой Answer.rb:

class Answer < ActiveRecord::Base 
validates :answer_text, presence: true 
belongs_to :sale_qualifier 
validates :sale_qualifier_id, presence: true 
end 

мой взгляд форма:

<div class="panel panel-default"> 
<%= form_for(@sale_qualifier) do |f| %> 
<% if @sale_qualifier.errors.any? %> 
    <div id="error_explanation"> 
    <h2><%= pluralize(@sale_qualifier.errors.count, "error") %> prohibited this answer from being saved:</h2> 
    <ul> 
    <% @sale_qualifier.errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
    <% end %> 
    </ul> 
    </div> 
<% end %> 
<div class="panel-body"> 
    <div class="col-sm-6"> 
    <h2><%= @question.question_text %></h2> 
    </div> 
    <div class="col-sm-6"> 
    <div class="form-group"> 
     <%= f.hidden_field :sales_opportunity_id, :value => @sales_opportunity.id %> 
    </div> 
    <%= f.fields_for :answers do |answer| %> 
     <%= answer.text_area :answer_text, :placeholder => "Enter your answer" %> 
    <% end %> 
    <div class="actions"> 
     <%= f.submit "Submit", class: "btn btn-large btn-success"%> 
    </div> 
    <% end %> 
    </div> 
</div> 
</div> 

Все поля отображаются правильно на v МЭН. Это файл журнала с помощью кнопки мыши отправить:

Started POST "/sale_qualifiers" for 127.0.0.1 at 2016-01-13 13:12:57 +0800 
Processing by SaleQualifiersController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"0NdiFqK9O2fqh7TvDamrUL4jeQ6otcoQGhBZX9DlaSg=", "sale_qualifier"=>{"sales_opportunity_id"=>"77", "answers_attributes"=>{"0"=>{"answer_text"=>"An Answer"}}}, "commit"=>"Submit"} 

Возвращается ошибка «Ответы sale_qualifier не может быть пустым».

Я уверен, что есть некоторая прямая ошибка, которую я не вижу в своем коде, если кто-нибудь может мне помочь. Я был бы признателен.

ответ

1

Как обычно, ответ приходит ко мне вскоре после размещения вопроса здесь. Это был оскорбительный линия в моем коде:

validates :sale_qualifier_id, presence: true 

Удаление, что позволяет мне обновить sale_qualfiier и ответ.