Рубиновый объект обновления - PullRequest
1 голос
/ 10 января 2012

Я новичок в Ruby on Rails, и у меня есть вопрос по обновлению / перезагрузке отношений.В следующем фрагменте кода я пытаюсь установить свойство store для объекта customer, а затем вернуть объект customer со вложенным свойством store, а не его id.Есть ли способ, которым я могу установить свойство магазина, а затем сказать RoR «найди меня покупателя и выпей из магазина», не выполняя очередную нагрузку на чтение?

store_id = params[:id];
store = Store.find( store_id );
session[ :store_id ] = store_id;

customer_id = session[ :customer_id ];
customer = Customer.find( customer_id );
customer.store = store;
customer.save

respond_to do |format|
  format.any(:json) { render :json => customer.to_json  }
end

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

Ответы [ 2 ]

3 голосов
/ 10 января 2012

to_json с параметрами подойдет для вас:

В вашем примере вам нужно изменить только последний раздел (и объект хранилища не будет загружен из db во второй раз)

respond_to do |format|
  format.any(:json) { render :json => customer.to_json(:methods => :store)  }
end
1 голос
/ 10 января 2012

На рельсах 3.1 вы можете получить доступ к объекту ассоциации напрямую через

customer.association(:store)

В более ранней версии рельсов объект ассоциации не был выставлен напрямую, как это.Затем вы можете делать такие вещи, как

customer.association(:store).loaded?
customer.association(:store).target = store

Это не будет проверять, что клиент и магазин связаны (то есть вы можете вставить любой старый магазин там), так что будьте осторожны.

IЯ не уверен, зачем вам это нужно, хотя -

customer.store = store

не должно вызывать перезагрузку объекта хранилища или что-то в этом роде.

...