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

私は現在、誰かが本をchecks_outおよびchecks_inするときに、パラメータが更新される機会があります(私はライブラリアプリを持っています)。true または false のいずれかが渡されます。現時点では、同じメッセージが表示されます。

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

それは間違っていると確信していますが、次の質問は、コントローラーでそのメソッドをどのように使用するのですか?それを行うより良い方法はありますか?

アドバイス/ヘルプをいただければ幸いです

ありがとう

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 に答える