1

我想知道在rails中是否可以执行以下操作。

当我在我的应用程序中更新参数 [:book] 时,我收到通知“书已签出”,它像这样在控制器中传递

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

我目前有时会更新参数,当有人签出和签入一本书时(我有一个图书馆应用程序)。无论是真还是假都通过了..此刻我得到了同样的信息。

我可以创建一种方法来显示不同的通知,具体取决于传递的是真还是假,所以像

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

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

任何建议/帮助表示赞赏

谢谢

4

1 回答 1

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
于 2013-01-09T19:34:18.377 回答