2012-10-17 1 views
0

Кодекс:rails accepts_nested_attributes_for - Ошибка: Mysql2 :: Ошибка: Неизвестный столбец 'предлагает.' в «где предложение»

class Client < ActiveRecord::Base 
    ... 
    has_one :offer, :dependent => :destroy 
    accepts_nested_attributes_for :offer 
    ... 
end 

class Offer < ActiveRecord::Base 
    ... 
    belongs_to :client 
    ... 
end 


<%= simple_form_for [:admin, @client], :html=> {:multipart => true } do |f| %> 
..some input fields 
<%= f.simple_fields_for :offer, @client.new_record? ? Offer.new : "" do |o| %> 
..some input fields 

Это работает для новых записей, но не обновляется.

Error: Mysql2::Error: Unknown column 'offers.' in 'where clause': DELETE FROM offers WHERE offers .`` = 718

Когда я изменить модель клиента к:

accepts_nested_attributes_for :offer, :reject_if => lambda {|a| a[:name].blank?} 

отступило сообщение об ошибке, он обновляет таблицу клиента, но не предложение таблицы.

Это работает:

has_one :offer, :dependent => :destroy 
    accepts_nested_attributes_for :offer, allow_destroy: true 

    belongs_to :client 

    <%= f.simple_fields_for :offer, @client.new_record? ? Offer.new : @client.offer do |o| %> 

ответ

1

Сначала это кажется логичным, что он не работает для обновления, так как, когда вы делаете:

<%= f.simple_fields_for :offer, @client.new_record? ? Offer.new : "" do |o| %> 

простых полей для попытается создать поля для "", тогда как он должен использовать объект предложения. Вы можете исправить это (там может быть лучший способ сделать это, это только одно решение, а не решение)

<%= f.simple_fields_for :offer, @client.offer.new_record? ? Offer.new : @client.offer do |o| %> 

EDIT: Я думаю, что было бы лучше, чтобы только построить предложение, если это Безразлично 't существует, так вот как это будет выглядеть:

<% @client.build_offer if @client.offer.new_record? %> 
<%= f.simple_fields_for :offer do |o| %> 
+0

Извините..pjam .. это не обновляет таблицу предложений .. – Werner