Rails找到属性为零的记录

时间:2013-10-12 20:11:19

标签: ruby-on-rails postgresql ruby-on-rails-4

我正在尝试使用where方法进行记录搜索,其中有两个条件,其中一个必须为零。

我正在使用Rails 4,Ruby 2.0.0和Postgres。

我有一个包含三个模型的应用程序:User,Drm和DrmMorning。用户有很多Drms,Drms有很多DrmMornings。我试图隔离一个DrmMorning记录,以便我可以编辑它。

这是我的drm_mornings控制器中的更新操作:

def update
  @user = current_user
  @drm = Drm.where(user_id: @user.id).last
  @drm_mornings = DrmMorning.where(" drm_id = ? AND location = ?", @drm.id, nil).first || DrmMorning.where(" drm_id = ? AND happy = ?", @drm.id, nil).first 
  if @drm_mornings.nil? 
    flash[:error] = "thanks for finishing up"
    render 'drm/intro'
  elsif @drm_mornings.update_attributes(morning_params)
    redirect_to 'ep_feelings'
  else
    flash[:error] = "something is broken"
    render 'drm/intro'
  end
end

如何对满足两个条件的最新单个记录执行数据库搜索,其中一个条件是其中一个属性的空值?

目的是获取当前用户最新Drm的第一个不完整的DrmMorning记录。这些记录在创建后分两个阶段进行编辑,因此 - 如果是nil,如果是nil分配结构。

每当我调用方法时,@drm_morning的行为都是空的,请用闪光灯发送到drm/intro说谢谢你完成。

但该记录不应该是空的。在我调用DrmMorning.last的控制台中,我得到了这个输出:

DrmMorning id: 8, name: "breakfast", begain: "7:00", end: "7:30", drm_id: 3, user_id: 1, created_at: "2013-10-12 20:04:29", updated_at: "2013-10-12 20:04:29", commuting: nil, shopping: nil, housework: nil, other_action_words: nil, other_action: nil, location: nil, interaction: nil, spouse: nil, friend: nil, co_worker: nil, parent: nil, child: nil, client: nil, boss: nil, student: nil, other_person: nil, other_person_words: nil, happy: nil, depressed: nil, angery: nil, enjoy: nil, pain: nil, fatigue: nil, active: nil, person_id: nil

当我读到它时,它应该满足更新操作中的条件。我检查了current_user函数是否正常工作,我已经能够将@drm变量分配给其他地方的代码。我在错误使用的地方吗?


检查nil值的语法是“ATTRIBUTE IS NULL”而不是“ATTRIBUTE = nil”,它在记录中查找值'nil'。

2 个答案:

答案 0 :(得分:5)

用于检查nil值的where函数中的语法不是

ATTRIBUTE = nil

而是

ATTRIBUTE IS nil

答案 1 :(得分:0)

尝试在控制台中放置断点并进行播放,这显然与您在控制台中搜索的内容有所不同。 用于调试的Gem https://github.com/deivid-rodriguez/byebug

此外,您有一个奇怪的表设计 - 如果DrmMorning属于Drm且Drm属于用户,为什么您需要DrmMorning中的用户列?您可以使用has_many到。

访问来自用户的那些

http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association