【问题标题】:ActiveRecord and map in RoRRoR 中的 ActiveRecord 和映射
【发布时间】:2013-04-04 10:53:27
【问题描述】:

我选择

m_repeats = Event.where(:repeat => 'monthly').where("schedule < ?", date.end_of_month)

然后我需要更改每个元素中的 shedule(它是日期字段)。

我尝试做:

m_repeats.map{ |elem| elem.schedule.year = date.today.year, elem.schedule.month = date.today.month } 

但我得到了错误:

Mysql2::Error: Unknown column 'schedule' in 'where clause': SELECT `events`.* FROM `events`  WHERE `events`.`repeat` = 'monthly' AND (schedule < '2013-04-30')

或 #

的未定义方法“计划”

什么是正确的方法?

【问题讨论】:

  • 您确认events表在schema.rb中有schedule字段了吗?可以访问 Event.first.schedule 吗?
  • 是的。 create_table "事件", :force => true do |t| t.string "title" t.date "shedule" t.integer "user_id" t.datetime "created_at", :null => false t.datetime "updated_at", :null => false t.string "repeat" end 还有我的“Where(...)”选择工作正常,我只在添加映射代码时看到错误
  • 是的,但 map 不是您收到数据库错误的原因,看起来像第二个 where
  • 我认为 Frans 是正确的 -- 您在 map 看到了错误,因为 ActiveRecord 在您询问结果之前不会执行查询

标签: ruby-on-rails arrays activerecord map


【解决方案1】:

尽量只使用一个类似的 where 语句

m_repeats = Event.where('events.repeat = ? AND events.schedule < ?', 'monthly', date.end_of_month)

或在计划列上明确命名您的查询表,例如

m_repeats = Event.where(:repeat => 'monthly').where("events.schedule < ?", date.end_of_month)

我不认为您的 map 方法导致了问题,因为事件的选择发生在 map 方法的调用中,并且您在选择查询中遇到了明显的问题。

【讨论】:

  • 第一个代码 - Mysql2::Error: Unknown column 'events.schedule' in 'where Clause': SELECT events.* FROM events WHERE (events.repeat = 'monthly' AND events .schedule
  • m_repeats = where('repeat = ? AND schedule events.* FROM events WHERE ( repeat = 'monthly' AND schedule
  • 好的,在这种情况下,您应该再次检查您的数据库 1) 是否所有迁移都已完成 2) 您的架构是否正确 3) 如果您正在使用控制台,您是否重新加载了控制台
  • Alsi 我在错误页面看到错误导致视图字符串 :shedule) do |date, events| %> 数据结构可能有问题?
  • 天哪,真的是语法错误 :) 'schedule' 而不是 'shedule' 非常感谢! :)
【解决方案2】:

真的是语法错误 :) 'schedule' 而不是 'shedule'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    相关资源
    最近更新 更多