Режим Rails acceptpts_nested_attributes_ для правильной работы - PullRequest
1 голос
/ 21 октября 2011

У меня есть такие модели:

class User < ActiveRecord::Base
  has_one :business
end
class Business < ActiveRecord::Base
  belongs_to :user
  has_many : locations
  accepts_nested_attributes_for :locations, :reject_if => lambda { |a| a[:location].blank?} 
  atr_accessible :name, :locations_attributes
  ...
end

class Location < ActiveRecord::Base
  belongs_to :business
  ...
end

когда я заполняю адрес в форме и отправляю форму для действия create BusicationsController, журнал показывает, что параметры верны:

... 
"business"=>{"name"=>"sos","locations_attributes"=>{"0"=>{"address"=>"location1"}, "1"=>{"address"=>"location2"}}}
...

В действии create BuseriesController

# :Post /usres/1/businesses
def create
  @user = User.find(params[:user_id])
  @business = @user.build_business(params[:business])
  if @business.save 
    ...
  else
    ...
  end
end

Я проверил журнал и обнаружил, что @business.save не вставил в базу данных какую-либо информацию о местоположениях, а только информацию о бизнесе, но params[:business] явно содержит хэш местоположений, так что, где я был не прав?

1 Ответ

1 голос
/ 23 октября 2011

Я полагаю, что с ошибкой в ​​проверке reject_if,

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

Где у вас атрибут местоположения в таблице местоположений?Как я понимаю, вы должны проверить следующим образом

accepts_nested_attributes_for :locations, 
   :reject_if => lambda { |a| a[:address].blank?}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...