Kısmi

2016-09-12 53 views
5

içinde kullanım yoluna değişken geçirme Bu book kullanarak Ruby on Rails öğreniyorum. here'dan ikinci alıştırmada takılıyorum.Kısmi

Benim formu kısmi app/views/users/_form.html.erb şuna benzer:

<% provide(:title, "Edit user") %> 
<% provide(:button_text, "Save changes") %> 
<% provide(:url, user_path) %> 
<h1>Update your profile</h1> 
<div class="row"> 
    <div class="col-md-6 col-md-offset-3"> 
    <%= render 'form' %> 
    <div class="gravatar_edit"> 
     <%= gravatar_for @user %> 
     <a href="http://gravatar.com/emails" target="_blank" rel="noopener noreferrer">Change</a> 
    </div> 
    </div> 
</div> 

:

<% provide(:title, 'Sign up') %> 
<% provide(:button_text, 'Create my account') %> 
<% provide(:path, signup_path) %> 
<h1>Sign Up</h1> 
<div class="row"> 
    <div class="col-md-6 col-md-offset-3"> 
    <%= render 'form' %> 
    </div> 
</div> 

ve benim düzenleme görmek app/views/users/edit.html.erb şudur:

<%= form_for(@user, url: yield(:path)) do |f| %> 
    <%= render 'shared/error_messages', object: @user %> 

    <%= f.label :name %> 
    <%= f.text_field :name, class: 'form-control' %> 

    <%= f.label :email %> 
    <%= f.email_field :email, class: 'form-control' %> 

    <%= f.label :password %> 
    <%= f.password_field :password, class: 'form-control' %> 

    <%= f.label :password_confirmation %> 
    <%= f.password_field :password_confirmation, class: 'form-control' %> 

    <%= f.submit yield(:button_text), class: "btn btn-primary" %> 
<% end %> 

kısmi My kayıt görünümü app/views/users/new.html.erb şudur Benim sorunum, hangi doğru yolu bilmiyorum r edit viewile ayarlamak zorundayım yöntemi sağlayın.

signup_path ile kayıt görünümü için iyi çalışıyor. Ne düzenleme görünümü için çalıştı bağlıdır: (şu anda kod örneğinde)

  • user_path
  • edit_user_path
  • edit_user_path(@user) akım yönlendirme hatası I Aşağıda

(kullanıcı nesnesi geçmesine) var:

enter image description here

ve aşağıdaki kullanıcıya ilişkin mevcut yolları olduğunu:

<%= form_for(@user) do |f| %> 
    <%= render 'shared/error_messages', object: @user %> 

    <%= f.label :name %> 
    <%= f.text_field :name, class: 'form-control' %> 

    <%= f.label :email %> 
    <%= f.email_field :email, class: 'form-control' %> 

    <%= f.label :password %> 
    <%= f.password_field :password, class: 'form-control' %> 

    <%= f.label :password_confirmation %> 
    <%= f.password_field :password_confirmation, class: 'form-control' %> 

    <%= f.submit yield(:button_text), class: "btn btn-primary" %> 
<% end %> 
:

enter image description here

Mesela ben bir url sağlamak için düzenleme görünümü için temin kullanmıyorsanız, burada gibi çalışıyor

Ancak amaç kısmi kullanarak kodu yeniden kodlamaktır, bu yüzden kayıt görünümü için bir URL vermem gerekiyor. routes.rb

:

Rails.application.routes.draw do 
    get 'sessions/new' 

    get 'users/new' 

    root 'static_pages#home' 
    get '/help', to: 'static_pages#help' 
    get '/about', to: 'static_pages#about' 
    get '/contact', to: 'static_pages#contact' 
    get '/signup', to: 'users#new' 
    post '/signup', to: 'users#create' 
    get '/login', to: 'sessions#new' 
    post '/login', to: 'sessions#create' 
    delete '/logout', to: 'sessions#destroy' 
    resources :users 
end 
+0

Eğer kısmını sonrası olabilir Bu benim çalışma çözümdür 'route.rb' sizin kullanıcılar için yollar belirlediğiniz – mrzasa

+0

Sadece işleme, Raylar ve formların aktif kayıtla nasıl çalıştığına bir göz atmalısınız. Modellerle iskele denetleyicisini oluşturmaya devam edin. Savunmayı çabuk öğreneceksin. –

+0

, 'routes.rb' @mrzasa – ronatory

cevap

2

Sonuç olarak, gerekli URL'yi here numaralı ikinci alıştırmadan gereksinim olarak geçmek için, yalnızca user_path'u sağlayarak çalışır. Sorgumda bahsettiğim gibi, zaten user_path ile denedim, ama görmediğim şey, URL'yi gömmek için kısmi yield(:path) formunu kullandım, bu yüzden kayıt görünümü için soruma baktığınızda ben değişkeni sağladım <% provide(:path, signup_path) %> ile doğru, ancak düzenleme görünümünde <% provide(:url, user_path) %> kullandım. Öyleyse, benim denemelerde anlattığım gibi doğru olanı ayarlansa bile düzenleme görünümünden doğru bir yol sağlayamayacağım açık.Bu nedenle, aynı zamanda kendi başınıza çalıştıktan sonra ve değişkenleri doğru atanmış olup olmadığına baktıktan sonra bu alıştırmada sıkışmış olanlar için.

formu kısmi app/views/users/_form.html.erb:

<%= form_for(@user, url: yield(:path)) do |f| %> 
    <%= render 'shared/error_messages', object: @user %> 

    <%= f.label :name %> 
    <%= f.text_field :name, class: 'form-control' %> 

    <%= f.label :email %> 
    <%= f.email_field :email, class: 'form-control' %> 

    <%= f.label :password %> 
    <%= f.password_field :password, class: 'form-control' %> 

    <%= f.label :password_confirmation %> 
    <%= f.password_field :password_confirmation, class: 'form-control' %> 

    <%= f.submit yield(:button_text), class: "btn btn-primary" %> 
<% end %> 

app/views/users/new.html.erb kayıt görünümü:

<% provide(:title, 'Sign up') %> 
<% provide(:button_text, 'Create my account') %> 
<% provide(:path, signup_path) %> 

<h1>Sign Up</h1> 
<div class="row"> 
    <div class="col-md-6 col-md-offset-3"> 
    <%= render 'form' %> 
    </div> 
</div> 

app/views/users/edit.html.erb düzenlemek görünüm:

<% provide(:title, "Edit user") %> 
<% provide(:button_text, "Save changes") %> 
<% provide(:path, user_path) %> 

<h1>Update your profile</h1> 
<div class="row"> 
    <div class="col-md-6 col-md-offset-3"> 
    <%= render 'form' %> 
    <div class="gravatar_edit"> 
     <%= gravatar_for @user %> 
     <a href="http://gravatar.com/emails" target="_blank" rel="noopener noreferrer">Change</a> 
    </div> 
    </div> 
</div> 
0

Sen yolunu beyan etmek gerekmez. resources :users kullanırsanız. Uygulamanız yolun nasıl ayarlanacağını bilecek.Eğer bildirirseniz:

new_user_path 

ama bildirirseniz:

@user = User.new 

yolu olacaktır

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

yolu olacaktır:

user_path(id) 

http://api.rubyonrails.org/classes/ActionDispatch/Routing/Mapper/Resources.html

+0

ben 'kaynakları kullanarak bir yol beyan etmek gerekmez anlamak her zaman görünür. Yani kayıt görünümü, url'ye ihtiyaç duyar, bu durumda 'signup_path'. Bunu sağlamak için, ** _ form parsiyel ** 'deki signup_path ile bu form_for (@user,'/signup ') 'gibi ayarlayın. Ben düzenleme görünümü için doğru yoldur soruma, anlatıldığı gibi sorun artık veya düzenleme görünümünde 'form_for' bu' form_for (@user) gibi görünecek biçimde bunun için bir yol belirlemek için önleyebilirsiniz nasıl ' – ronatory