#ruby-on-rails #ruby-on-rails-3
#ruby-on-rails #ruby-on-rails-3
Вопрос:
Я хочу направить корень моего проекта к действию books#show. И пусть идентификатор книги будет динамическим.
Но я не хочу, чтобы это влияло на стандартное действие show.
ie … (этот код, конечно, не работает 🙂
def show
if @book.id is present?
@book = Book.find(params[:id])
else
@book = Book.first
end
end
Я надеюсь, что это имеет смысл.
В принципе, я хочу иметь возможность просматривать любую книгу по ее идентификатору. Но если идентификатор не указан, пусть по умолчанию будет Book.first .
Заранее спасибо…
Ответ №1:
Вы близки. Попробуйте использовать params[:id].present?
в качестве if
условия, и оно должно получить то, что вы хотите.
Вам понадобится root :to => "books#show"
маршрут в вашем routes.rb, чтобы заставить его работать.
Однако, с точки зрения ясности, у меня было бы просто два действия: ваше обычное show и home
действие, которое выглядит примерно так:
def home
@book = Book.first
render :action => "show"
end
def show
@book = Book.find(params[:id])
end
Затем в вашем routes.rb:
root :to => "books#home"
Это позволит вам сохранить два действия чистыми и более напрямую сообщать о целях этих действий.
Комментарии:
1. Удаляю мой ответ, потому что этот подход более чистый и гораздо более читаемый 🙂
2. Спасибо, Крис! Исправление кода работает. Но имеет абсолютно смысл разделить их… Еще раз спасибо.
3. Извините за это. Это заставляет вас ждать 10 минут, чтобы принять. Итак, я очень быстро выполнил поручение. Идеальный ответ. Еще раз спасибо за вашу помощь…