Часть 1: Решение указанной проблемы:
Чтобы очистить загруженные данные ассоциации, используйте метод target
для ассоциации:
location.state.cities.target=[]
Если у вас есть доступ к cities
сейчас:
location.state.cities
=> []
Часть 2. Неуклюжий способ избежать проблемы:
Избегайте загрузки ассоциации при доступе к cities
.Используйте
self.state.cities.all
Вместо
self.state.cities
Часть 3. Что-то пахнет подозрительно:
Почему вы храните объекты для вспышки?Flash обычно предназначен для отправки текстовых сообщений.Если вы назначите не строки для flash, вы сразу же получите ограничение на размер файла cookie.
Кроме того, когда вы проверяете, зачем загружать все города?Значит ли это, что вы проходите валидацию в Ruby?Можете ли вы опубликовать код проверки?В большинстве случаев вы можете оптимизировать это, переместив проверку в БД.
Редактировать: Расширенный ответ на основе комментария
Я следую этому шаблону в Rails 2.3.x.Переменные, к которым я хочу обратиться в представлении, связанном с действием edit
, всегда являются подмножеством переменных, доступных в действии update
.
class ProductsController < ApplicationController
before_filter :init_data, :only => [:new, :create, :edit, :update,
:destroy, :show]
def update
@product.attributes = params[:product]
if @product.save
flash[:notice] = "Successfully saved the product."
redirect_to product_path(@product)
else
render :action => 'edit'
end
end
private
def init_data
switch(action.to_sym)
when :new, :create
@product = Product.new(params[:product])
when :edit, update, :destroy, :show
@product = Product.find(params[:id])
end
end
end