2015-03-11 3 views
2

Новый веб-разработчик здесь, и я думаю, что, возможно, мне не хватает некоторых очень фундаментальных знаний. Учитывая кодПочему рельсы перенаправляются на действие шоу после создания?

def create 
     @post = Post.new(post_params) 
     if @post.save 
      redirect_to @post 
     else 
      render "new" 
     end 
end 

почему вид шаблонов перенаправления на четкости показать действия? Если я не определяю def show и соответствующие ему представления, рельсы выдадут мне ошибку.

Я просто не понимаю, почему, хотя код redirect_to @post после того, как я сохранил сообщение, он, похоже, перенаправляется на страницу показа после создания сообщения. Является ли это всего лишь одной из тех релейных вещей, которые я должен просто воспринимать так, как есть, или я пропустил некоторые фундаментальные знания протокола HTML (чего я, честно говоря, не знаю много)?

Edit: Для дальнейшего уточнения моего вопроса, я вижу, что @post уже определен в методе создания и определяются как Post.new (post_params). когда я redirect_to @post, не будет ли это просто повторить эту строку?

ответ

7

Давайте посмотрим на код

def create 
    @post = Post.new(post_params) 
    if @post.save 
    redirect_to @post 
    else 
    render "new" 
    end 
end 

Почему шаблонам перенаправлять к четкости шоу действия? Если я не буду определять шоу def и его соответствующие представления, рельсы выдадут мне ошибку.

В create действия вы создаете новую запись, так что если вы посмотрите на эту часть кода

if @post.save 
    redirect_to @post 

Когда @post успешно сохранен, мы перенаправляет его, чтобы показать действие, написав redirect_to @post, фактический маршрут для show будет post_path(@post), поэтому вы также можете написать redirect_to post_path(@post), но даже если вы просто пройдете объект с redirect_to, рельсы перенаправят его на действие шоу. Теперь идти к else части

else 
    render "new" 

Если объект @post не сохраняется в базе данных (из-за проверки), мы хотим, чтобы перезагрузить форму, поэтому в приведенном выше коде render просто делает мнение new действия и не вызывая действие new, отображается только представление, потому что new.html.erb содержит форму.

Надеюсь, это помогло!

+0

спасибо за объяснение! исправьте меня, если я ошибаюсь, но означает ли это, что redirect_to всегда будет возвращаться к действию шоу? могу ли я перенаправить на что-то еще? – user3277633

+1

Да, попробуйте 'redirect_to 'http://google.com" вместо этого, и он перенаправит на 'google', вы можете передать любой' url' с перенаправлением – RSB

+1

Я вижу сейчас, спасибо! – user3277633