Tag: activerecord

rake db:migrate没有检测到新的迁移?

有经验的Rails / ActiveRecord 2.1.1 您创建了第一个版本(例如)ruby脚本\生成脚手架产品标题:字符串描述:text image_url:string 这创建(例如)名为20080910122415_create_products.rb的迁移文件 您可以使用rake db:migrate应用迁移 现在,使用ruby脚本生成一个字段到产品表\ generate migration add_price_to_product price:decimal 这将创建一个名为20080910125745_add_price_to_product.rb的迁移文件 如果您尝试运行rake db:migrate,它实际上将恢复第一次迁移,而不是应用下一次迁移! 所以你的产品表会被破坏! 但是,如果你单独使用rake,它会告诉你一个迁移正在等待 请注意,应用rake db:migrate(一旦表被销毁)将按顺序应用所有迁移。 我找到的唯一解决方法是指定新迁移的版本,如: rake db:migrate version=20080910125745 所以我想知道:这是一个预期的新行为吗?

Rails 4.2.0中的简单整数赋值的RangeError应该通过validation捕获

*更新:现在已修复4.2.stable和4.2.1 * 在Rails 4.2.0(和当前的4.2.stable)中, ensure_in_range方法在ARvalidation之前发生,产生RangeError 如果我做一些简单的事情 @obj.threshold = 10_000_000_000 在具有postgres类型整数的列上 threshold | integer | 它产量 RangeError:10000000000超出ActiveRecord :: ConnectionAdapters :: PostgreSQL :: OID :: Integer的范围,限制为4来自… / 2.0.0-p598 / lib / ruby​​ / gems / 2.0.0 / bundler / gems / rails -62e9e61f2d1b / activerecord / lib / active_record / type / integer.rb:41:在`ensure_in_range’中 这是真的! 但告诉用户。 有一个像ActiveRecord模型validation validates […]

如何在Rails 3.2中翻译ActiveRecord属性名称?

我的模型(用户)中有以下validation: validates :first_name,:length => {:minimum => 2,:maximum => 50},:format => { :with => /[a-zA-Z]+/ } 我的yml语言环境文件中有以下内容: attributes: first_name: too_short: “First name is too short” too_long: “First name is too long” invalid: “First name is not valid” 现在,如果我启动rails console ,并编写以下内容: a = User.new a.valid? a.errors.full_messages 我会看到以下错误: [“First name First name is too short”, “First name First […]

Rails 3忽略Postgres唯一约束exception

什么是挽救exception并继续处理的正确方法? 我有一个具有文件夹和项目的应用程序,通过名为folders_items的连接表具有habtm关系。 该表具有唯一约束,确保没有重复的项目/文件夹组合。 如果用户尝试多次将项目添加到同一文件夹,我显然不希望添加其他行; 但我也不想停止处理。 当违反唯一约束时,Postgres会自动抛出exception,因此我尝试在控制器中忽略它,如下所示: rescue PG::Error, :with => :do_nothing def do_nothing end 这在单次插入时工作正常。 控制器执行渲染,状态代码为200.但是,我有另一种方法在循环中执行批量插入。 在该方法中,控制器在遇到第一个重复行时退出循环,这不是我想要的。 起初,我认为循环必须包含在正在回滚的事务中,但事实并非如此 – 重复之前的所有行都被插入。 我希望它只是忽略约束exception并移动到下一个项目。 如何防止PG :: Errorexception中断此操作?

使用Activerecord对多列进行求和

我是Activerecord的新手。 我想对模型学生的多个列进行求和。 我的模范学生如下: class Student < ActiveRecord::Base attr_accessible :class, :roll_num, :total_mark, :marks_obtained, :section end 我想要这样的东西: total_marks, total_marks_obtained = Student.where(:id=>student_id).sum(:total_mark, :marks_obtained) 但它给出了以下错误。 NoMethodError: undefined method `except’ for :marks_obtained:Symbol 所以我问我是否必须为上述模型查询两次,即一次查找总标记,另一次查找获得的标记。

rails ActiveRecord在控制台中找到

当我在Rails 3.2控制台中时,我可以做到这一点: p = Person.last p.last_name 并打印姓氏。 但是当我尝试通过id找到它时,它能够找到单个记录并将其存储在我的变量p ,但是我无法打印last_name列。 例如: p = Person.where(id: 34).limit(1) 这里打印p显示所有列,但p.last_name说明了这一点 NoMethodError: undefined method `last_name’ for # 任何帮助,将不胜感激。

使用ActiveRecord在表上自行加入

我有一个名为Name的ActiveRecord,它包含各种Languages名称。 class Name < ActiveRecord::Base belongs_to :language class Language < ActiveRecord::Base has_many :names 用一种语言查找名称很容易: Language.find(1).names.find(whatever) 但我需要找到匹配的对,其中语言1和语言2具有相同的名称。 在SQL中,这需要一个简单的自联接: SELECT n1.id,n2.id FROM names AS n1, names AS n2 WHERE n1.language_id=1 AND n2.language_id=2 AND n1.normalized=n2.normalized AND n1.id != n2.id; 如何使用ActiveRecord执行此类查询? 请注意,我需要找到一对名称(=匹配的两侧),而不仅仅是语言1中恰好与某些内容匹配的名称列表。 对于奖励积分,将n1.normalized=n2.normalized替换为n1.normalized LIKE n2.normalized ,因为该字段可能包含SQL通配符。 我也对以不同方式建模数据的想法持开放态度,但如果可以的话,我宁愿避免为每种语言使用单独的表。

rails 3 / postgres – 如果不应用,则为字符串多长时间:模式中的限制

我的googlefu必须是弱的,因为我找不到任何东西来告诉我Rails应用程序中的字符串列的默认限制(在Heroku上托管,使用PostgreSQL作为数据库)。 任何帮助,将不胜感激!

Rails:’references:foo’和’integer:foo_id’之间有区别吗?

当我在迁移中使用references :foo时,生成的列称为foo_id 。 做references :foo之间是否有任何区别references :foo和只做integer :foo_id ? 也许在幕后发生了一些事情来强制执行数据库级别的关系?

Rails添加自定义的热切加载

我在Rails中有许多自定义的find_by_sql查询。 我想用它们急切加载,但似乎没有一个好方法来做到这一点。 我已经看到eager_custom.rb文件浮动,现在它似乎不适用于Rails。 现在看来Rails确实急于加载,使用2个查询(常规查询加上查询,其中’id IN’来自第一个查询的ID),而不是过去使用的单个连接查询。 我的问题是,如果我执行自定义SQL查询,然后执行’id IN’查询,有没有办法将关联对象添加回初始查询结果? 例如,我有使用find_by_sql加载的主题,然后我找到主题ID在主题ID中的主题图像,有没有办法手动将图像添加回主题? 谢谢