Измените сообщение уведомления, в зависимости от того, какой атрибут обновлен

Мне было интересно, возможно ли в рельсах следующее.

Когда я обновляю параметры [: 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

У меня есть случаи в настоящее время, когда параметры обновляются, когда кто-то проверяет и проверяет в книге (у меня есть приложение для библиотеки). Истина или ложь передается. На данный момент я получаю одно и то же сообщение.

Могу ли я создать метод для отображения другого уведомления, зависящего от того, передано ли 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
nl ja de

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
1
добавлено
удивительный ответ, спасибо большое, приятное использование тернарного оператора там :)
добавлено автор Richlewis, источник
pro.ruby
pro.ruby
1 181 участник(ов)

Язык программирования Ruby Additional docs: https://rubyreferences.github.io/rubyref/ Invite: https://telegram.me/joinchat/Be4rsT2NuB3CyJaF26j1kA Кто хочет компилировать: @crystal_ru (его синтаксис основан на Ruby) Участник @proDOT

Ruby, Rails, Hanami | dry-rb
Ruby, Rails, Hanami | dry-rb
1 180 участник(ов)

https://telegram.me/rubyjob - Ruby Job По вопросам - @eugene_shved

Ruby School .us
Ruby School .us
1 045 участник(ов)

Чат-болталка для учеников руби-школы и не только. Правила: https://telegra.ph/Pravila-chata-Rubi-shkoly-03-13

Random Ruby Chat
Random Ruby Chat
589 участник(ов)

Правила публикации вакансий: https://t.me/codenamecrud/60865

Rubyata
Rubyata
333 участник(ов)

Коммюнити Ruby и Ruby On Rails Флуд не приветствуются. Вакансии можно публиковать только и ТОЛЬКО по пятницам с хештегом #вакансия.

Ruby Talks
Ruby Talks
236 участник(ов)

Национальная Флеймотека

RubyRush
RubyRush
189 участник(ов)

rubyrush.ru программирование для самых новичков

Rails Chat
Rails Chat
87 участник(ов)

You are welcome to discuss Ruby On Rails development process and other stuff