2012-05-07 8 views
6

Michael Hartl'ın eğitimine adresinden gidiyorum. Temelde Kullanıcıların Mesaj gönderebileceği ve diğerlerinin Cevap bırakabileceği bir mesaj panosu uygulamasıdır. Şu anda Users'u yaratıyorum. UsersController herşey böyle bakmak İçinde:Belirli bir ActiveRecord nesnesine redirect_to kullanarak o nesneyle bağlantı oluşturmak için

class UsersController < ApplicationController 
     def new 
     @user = User.new 
     end 

     def show 
     @user = User.find(params[:id]) 
     end 

     def create 
     @user = User.new(params[:user]) 
     if @user.save 
      flash[:success] = "Welcome to the Sample App!" 
      redirect_to @user 
     else 
      render 'new' 
     end  
     end 
    end 

yazar aşağıdaki satırları eşdeğer olduğunu söylüyor. Hangi bana mantıklı:

@user = User.new(params[:user]) 
    is equivalent to 
    @user = User.new(name: "Foo Bar", email: "[email protected]", 
      password: "foo", password_confirmation: "bar") 

redirect_to @usershow.html.erb yönlendirir. Bu tam olarak nasıl çalışır? show.html.erb'a gitmek nasıl biliyor?

cevap

13

Bu, Ray'ın huzurlu yönlendirmesinin sihri ile ele alınır. Spesifik olarak, belirli bir nesne redirect_to yapmanın, bu nesne için show sayfasına gittiğine dair bir kural var. Rails, @user'un aktif bir kayıt nesnesi olduğunu bilir, bu yüzden nesnenin gösterim sayfasına gitmek istediğinizi bildiğiniz gibi yorumlar.

# If you wanted to link to just a magazine, you could leave out the 
# Array: 

<%= link_to "Magazine details", @magazine %> 

# This allows you to treat instances of your models as URLs, and is a 
# key advantage to using the resourceful style. 

Esas olarak, routes.rb dosyasında dinlendirici kaynakları kullanarak doğrudan ActiveRecord nesnelerin dışına url en oluşturmak için size 'kısayolları' veriyor:

İşte Rails Guide - Rails Routing from the Outside In. uygun bölümünden bazı ayrıntı. Eğer redirect_to ait source code bir göz atacak olursak

1

, size bir nesne @ makale, url_for (@ makale olduğunu olduğunu varsayalım, bir nesne ile url_for işlevi çağırmak için redirect_to_full_url(url_for(options), status), denemek dönecektir nihayet göreceksiniz), bu gibi döner: "http://localhost:3000/articles/11", bu senin yönlendirme o zaman, bu URL'ye yeni bir istek olacak, sen de de türüne göre konsolda yolları kontrol edebilirsiniz:

rake routes

irade SHOW eylemi gidin ve show.html.erb yılında işlemek için neden

ki öldürür. Umut sorunuzu cevapladı.

İlgili konular