Application Controller无法正常工作

时间:2015-12-16 05:47:34

标签: ruby-on-rails model-view-controller

如果已从数据库中删除记录,我试图将id设置为default_working_production_id0。这些行在生产控制器中工作,但是在应用程序控制器中不起作用。有什么想法吗?

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

1 个答案:

答案 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_iddefault_working_production_name设置为所需内容,如果它们不存在,数据库将填充它们<{1}}和0

根据经验,如果你可以逃脱数据库执行计算(而不是你的网络服务器),你必须这样做。很多人忘记了数据库服务器是为你操纵数据的 - 当你拥有另一台服务器的全部功能来执行诸如设置默认等任务时,你的应用程序就没有必要这样做了。 / p>

如果您希望将其保留在Rails应用中,则需要使用after_destroy

No Current Production Set