根据更新的属性更改通知消息

时间:2013-01-09 19:28:34

标签: ruby-on-rails ruby-on-rails-3 alerts

我想知道轨道中是否可以使用以下内容。

当我在我的应用程序中更新params [:book]时,我会收到通知' book check out',这会在控制器中传递,如此

def update
@book = Book.find(params[:id])
  if @book.update_attributes(params[:book]) 
   redirect_to books_path, :notice => "You have checked out this book"
  else
   render :action => 'show'
  end
end

我现在有时候更新参数,当有人check_out并检查一本书时(我有一个图书馆应用程序)。无论是真还是假......目前我都得到同样的信息。

我是否可以根据是否传递true或false创建一个显示不同通知的方法,如

def check_message
if book.check_out == true
 :notice => 'You have checked out the book'
else
 :notice => 'you have checked the book back in' 
end

然后在控制器中

def update
@book = Book.find(params[:id])
  if @book.update_attributes(params[:book])
   redirect_to books_path, check_book
  else
   render :action => 'show'
  end
end

我确定这是错的,但我的下一个问题是如何在控制器中使用该方法,是否有更好的方法呢?

任何建议/帮助表示赞赏

由于

1 个答案:

答案 0 :(得分:1)

我建议你这样做:

@book = Book.find(params[:id])
  if @book.update_attributes(params[:book])
   redirect_to books_path, :notice => "You have checked #{@book.checked_out ? 'out the book' : 'the book back in'}"
  else
   render :action => 'show'
  end
end

或者如果您仍想使用模型中的方法:

@book = Book.find(params[:id])
  if @book.update_attributes(params[:book])
   redirect_to books_path, :notice => @book.checek_message
  else
   render :action => 'show'
  end
end


# book model
def check_message
  book.check_out ? 'You have checked out the book' : 'you have checked the book back in' 
end