use*_*042 2 postgresql ruby-on-rails 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
Run Code Online (Sandbox Code Playgroud)
如何对满足两个条件的最新单个记录执行数据库搜索,其中一个条件是其中一个属性的空值?
目的是为当前用户的最新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
Run Code Online (Sandbox Code Playgroud)
当我读到它时,它应该满足更新操作中的条件.我检查了,current_user功能正在运行,我已经能够在@drm其他地方分配变量.我在错误使用的地方?
检查nil值的语法是"ATTRIBUTE IS NULL"而不是"ATTRIBUTE = nil",它在记录中查找值'nil'.
where函数中用于检查nil值的语法不是
ATTRIBUTE = nil
Run Code Online (Sandbox Code Playgroud)
反而
ATTRIBUTE IS nil
Run Code Online (Sandbox Code Playgroud)