如果已从数据库中删除记录,我试图将id设置为default_working_production_id
到0
。这些行在生产控制器中工作,但是在应用程序控制器中不起作用。有什么想法吗?
unless Production.exists?(:id => current_user.default_working_production_id)
current_user.default_working_production_id = 0
current_user.default_working_production_name = "No Current Production Set"
end
EDIT 这是我的应用程序控制器:
def index
@production = Production.where(user_id: current_user)
@default_working_production = current_user.default_working_production
unless Production.exists?(:id => current_user.default_working_production_id)
current_user.default_working_production_id = 0
current_user.default_working_production_name = "No Current Production Set"
end
end
在我的productions_controller中,我有以下创建函数
def create
@production = Production.new(production_params)
@production.user = current_user
@production.user_name = current_user.name
if @production.save
current_user.default_working_production_id = @production.id
current_user.default_working_production_name = @production.title
respond_to do |format|
if current_user.save
format.html { redirect_to productions_path }
else
format.html { redirect_to productions_path, notice: "Error. Please contact support." }
end
end
else
render 'new'
end
end
答案 0 :(得分:2)
这不应该放在控制器中 - 它会为每次调用添加额外的处理,导致你的应用程序运行速度明显变慢。
看起来您最好在数据库中使用defaults
:
$ rails g migration AddDefaultsToUsers
#db/migrate/add_defaults_to_users________.rb
class AddDefaultsToUsers < ActiveRecord::Migration
def change
change_column :users, :default_working_production_id, :integer, default: 0
change_column :users, :default_working_production_name, :string, default: "No Current Production Set"
end
end
$ rake db:migrate
这样您就可以将default_working_production_id
和default_working_production_name
设置为所需内容,如果它们不存在,数据库将填充它们<{1}}和0
。
根据经验,如果你可以逃脱数据库执行计算(而不是你的网络服务器),你必须这样做。很多人忘记了数据库服务器是为你操纵数据的 - 当你拥有另一台服务器的全部功能来执行诸如设置默认等任务时,你的应用程序就没有必要这样做了。 / p>
如果您希望将其保留在Rails应用中,则需要使用after_destroy
:
No Current Production Set