[英]Name Error "uninitialized constant" ruby on rails
我想使用具有特殊条件的update_attributes
更新数据库中的数据(条件工作正常)
代码 :
class LanguagesController < ApplicationController
def language_config
current_user=Authorization.current_user
logger.info "9"
if params[:examination_id] ==1
logger.info "3"
LanguageSetting.find(:all, :conditions => "section = 'examination'")
logger.info "1"
LanguageSetting.update_attributes(:language =>"english")
else
logger.info "2"
LanguageSetting.find(:all, :conditions => "section = 'examination'")
LanguageSetting.update_attributes(:language =>"arabic")
end
end
end
在日志文件中我们发现:
Parameters: {"controller"=>"languages", "action"=>"language_config"}
Username : admin Role : Admin
9
2
NameError (uninitialized constant LanguagesController::LanguageSetting):
这意味着条件工作正常,但为什么 Name 错误? 数据库中的表名为: language_settings
为什么我收到这个错误? 顺便说一句,我没有创建我认为不需要的模型,还是我错了?
请在信息方面需要帮助
要与数据库表交互,您需要一个模型。
对于最低限度,只需使用以下内容创建一个app/models/language_setting.rb
(如果您使用的东西少于 Rails 5,请从ActiveRecord::Base
继承)
class LanguageSetting < ApplicationRecord
end
Rails 模型通过查看模式来为各种属性自动生成 getter/setter 方法。 这就是为什么在模型就位后,您可以说:
setting = LanguageSetting.new
setting.language = "english"
setting.save
以及您在问题中显示的代码。
您需要创建一个模型来与数据库中的表进行通信。 我建议阅读官方 Rails指南。
在代码中,您在模型上应用条件但不存储其结果。 :update_attributes
是 ActiveRecord::Model 类的实例方法。
所以你正在做的事情可以像下面那样实现。 首先定义模型。
settings = LanguageSetting.where("section = 'examination'")
settings.update_attributes(:language =>"arabic")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.