为什么这些代码不能按预期工作?

时间:2013-03-25 15:20:16

标签: ruby-on-rails

我写了一个控制器

class NotificationsController < ApplicationController
  before_filter :authenticate_user!

  def index
    @notification = current_user.notification
    if @notification.unread == 0
      redirect_to root_path
    else
      @notification.unread == 0
      @notification.save
    end
  end
end

我希望显示索引页面之后@notification.unread为0。但它实际上无法正常工作。 如何更改这些代码以使其正常工作。

希望你能帮助我,非常感谢:)

4 个答案:

答案 0 :(得分:2)

尝试使用@notification.unread = 0代替@notification.unread == 0

答案 1 :(得分:2)

我不确定我是否完全明白你要做什么,但是你正在调用==两次,这是一个比较运算符,我想在第二部分你要设置值,所以你应该use = only

喜欢这个

class NotificationsController < ApplicationController
  before_filter :authenticate_user!

  def index
    @notification = current_user.notification
    if @notification.unread == 0
      redirect_to root_path
    else
      @notification.unread = 0
      @notification.save
    end
  end
end

答案 2 :(得分:0)

   else
      @notification.unread = 0
      @notification.save
    end

@ notification.unread == 0不会更改属性值。 :)

答案 3 :(得分:0)

将业务逻辑移动到模型总是一个好主意,因此您可以将其写为

class Notification < ActiveRecord::Base

  def unread?
    unread == 0
  end

end

class NotificationsController < ApplicationController
  before_filter :authenticate_user!

  def index
    @notification = current_user.notification
    @notification.unread? ? (@notification.update_attributes("unread", 0) : (redirect_to root_path))
  end
end