在 Rails 中使用保留字?

Posted

技术标签:

【中文标题】在 Rails 中使用保留字?【英文标题】:Subject a reserved word in Rails? 【发布时间】:2012-12-30 18:11:49 【问题描述】:

我在我的 Rails 3.2 应用程序中构建了一个名为“Subject”的模型。我使用了下面的脚手架命令。

rails g scaffold Subject subject singular:boolean gender:integer subject_masculine subject_feminine subject_neuter language:references --skip-stylesheets

脚手架几乎运行到最后,但随后给出了一个关于助手的神秘错误:

名称“SubjectsHelper”要么已在您的应用程序中使用,要么由 Ruby on Rails 保留。请选择一个替代方案并再次运行此生成器。

我试过倒转脚手架并重建。最后我只是建了桌子,它似乎工作正常。没有 helpers/subjects_helper.rb 文件,但我不希望这个特定模型需要帮助器。

我在任何保留字列表中都找不到主题,但这本身就是一个问题。关于这个问题已经提出了另一个 SO 帖子。

List of reserved words in rails *3*

为什么会出现这个错误,我可以忽略它吗?

编辑

我的 Gemfile 应要求

source 'https://rubygems.org'

gem 'rails', '3.2.8'
gem 'thin'
gem 'sinatra'
gem 'pg'
gem 'simple_form'
gem "nested_form"
gem 'thinking-sphinx'
gem 'devise'
gem 'haml-rails'
gem 'ruby_parser'
gem 'html2haml'
gem 'best_in_place'
gem 'carrierwave'
gem 'fog'
gem 'seed_dump'
gem 'bluecloth'
gem 'redcarpet'

group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'
  gem 'prototype-rails'
  gem 'uglifier', '>= 1.0.3'
  gem 'twitter-bootstrap-rails'
  gem 'therubyracer'
  gem 'less-rails'
  gem 'jquery-datatables-rails'
end

gem 'jquery-rails'
gem 'social_stream'
gem 'rails-footnotes', '>= 3.7.5.rc4', :group => :development

group :development do
  gem 'rails-erd'
  gem 'quiet_assets'
end

gem 'vestal_versions', :git => "git://github.com/futurechimp/vestal_versions.git"
gem 'diffy'
gem 'diffrent'

EDIT2

按照 Philip 的建议,我从 Rails 控制台运行了 Module.constants 命令。在输出中,有两个“主题”值:

:SubjectsHelper
:Subject

我检查了好几次没有助手,所以我决定添加一个。我创建了 helpers/subjects_helper.rb 文件,代码如下:

module SubjectsHelper
end

Rails 现在已正常重启。不过我还是不明白发生了什么。

【问题讨论】:

为什么生成命令中有第二个主题? 我猜是Rspec用的 试试 Module.constants.include? :SubjectsHelper 感谢您的评论 Evgeniy。不过我不太明白你的意思。 回答Sathish的问题:第一个subject是类名,第二个是一个叫做subject的字段。我把字符串默认关闭了。 【参考方案1】:

正如您所说的,SubjectsHelper 已经由 Social Stream 提供。见:

https://github.com/ging/social_stream/blob/master/base/app/helpers/subjects_helper.rb

您的解决方案正在运行,因为您正在重新打开模块,这在 Ruby 中是有效的操作。

【讨论】:

【参考方案2】:

我找到了。我正在使用 Social Stream gem,它在路线中有一个主题。

subject_lrdd        /subjects/lrdd/:id(.:format)

它必须埋在引擎的某个地方。

【讨论】:

可以创建ssubject模型;注意双's'

以上是关于在 Rails 中使用保留字?的主要内容,如果未能解决你的问题,请参考以下文章

[20170728]oracle保留字.txt

保留字(reserved field)是什么意思?

Java中关键字和保留字

Oracle基础之保留字和关键字

在列名中使用保留字

如何在 Oracle 中转义保留字?