2016-09-12 22 views
5

Tôi đang học Ruby on Rails bằng cách sử dụng book này. Tôi bị kẹt trong bài tập thứ hai từ here.Biến đổi để sử dụng đường dẫn trong một phần

hình thức của tôi một phần app/views/users/_form.html.erb trông như thế này:

<%= 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 %> 

đăng ký của tôi xem app/views/users/new.html.erb với một phần là thế này:

<% 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> 

và chỉnh sửa của tôi xem app/views/users/edit.html.erb là thế này:

<% 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> 

Vấn đề của tôi là tôi không biết con đường phù hợp nào r chỉnh sửa chế độ xem Tôi phải đặt với cung cấp phương thức.

Với signup_path nó hoạt động tốt cho chế độ xem đăng ký. Những gì tôi đã cố gắng để sửa xem là:

  • user_path (hiện trong ví dụ mã)
  • edit_user_path
  • edit_user_path(@user) (để vượt qua các đối tượng người dùng)

Dưới lỗi định tuyến hiện tại tôi got:

enter image description here

và dưới đây là các tuyến đường có sẵn liên quan đến người sử dụng:

enter image description here

Ví dụ nếu tôi không sử dụng cung cấp cho các điểm chỉnh sửa để cung cấp một địa chỉ, nó hoạt động tốt như ở đây:

<%= 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 %> 

Nhưng mục đích là để cấu trúc lại mã bằng cách sử dụng partials, vì vậy tôi cần cung cấp url cho chế độ xem đăng ký.

Các 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

có thể giúp bạn gửi phần của 'routes.rb' nơi bạn đặt đường dẫn cho người dùng? – mrzasa

+0

Bạn chỉ cần xem qua quy trình, Đường ray và biểu mẫu của chúng hoạt động như thế nào với bản ghi hoạt động. Hãy đi với việc tạo ra các bộ điều khiển giàn giáo với các mô hình. Bạn sẽ definalty học một cách nhanh chóng. –

+0

đã thêm 'routes.rb' @mrzasa – ronatory

Trả lời

2

Vì vậy, cuối cùng để vượt qua url cần thiết theo yêu cầu từ bài tập thứ hai here, nó hoạt động với việc cung cấp chỉ user_path. Như tôi đã đề cập trong câu hỏi của mình, tôi đã thử nó với user_path, nhưng những gì tôi không thấy là tôi đã sử dụng ở dạng yield(:path), để nhúng url, vì vậy khi bạn xem câu hỏi của tôi cho chế độ xem đăng ký, tôi đã cung cấp biến ngay với <% provide(:path, signup_path) %>, nhưng trong chế độ xem chỉnh sửa tôi đã sử dụng <% provide(:url, user_path) %>. Vì vậy, rõ ràng là tôi không thể cung cấp đường dẫn đúng từ chế độ xem chỉnh sửa, ngay cả khi tôi đặt đúng cách như bạn có thể thấy tôi đã mô tả trong các lần thử.

Vì vậy, đối với những người bị kẹt trong tập thể dục đó sau khi tự mình thử và sau khi tìm chính xác nếu bạn đã gán biến của mình ngay. Đây là giải pháp làm việc của tôi:

Dạng phần 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 %> 

Quan điểm đăng ký app/views/users/new.html.erb:

<% 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> 

Tóm lược sửa đổi xem app/views/users/edit.html.erb:

<% 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

Bạn không cần phải khai báo các con đường. Nếu bạn sử dụng resources :users. Ứng dụng của bạn sẽ biết cách thiết lập đường dẫn.Nếu bạn khai báo:

@user = User.new 

đường dẫn sẽ là:

new_user_path 

nhưng nếu bạn khai báo:

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

đường dẫn sẽ là:

user_path(id) 

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

+0

Tôi hiểu rằng tôi không phải khai báo đường dẫn bằng cách sử dụng 'tài nguyên: người dùng', nhưng trong trường hợp này tôi cần cung cấp chế độ xem đăng ký và chế độ xem chỉnh sửa. Do đó, chế độ xem đăng ký cần url, trong trường hợp này là 'signup_path'. Để cung cấp nó, tôi đặt nó như thế này 'form_for (@user, '/ signup')' với signup_path trong ** _ form partial **. Vấn đề bây giờ là tôi đã mô tả trong câu hỏi của tôi, đó là đường dẫn đúng cho chế độ xem chỉnh sửa hoặc làm thế nào tôi có thể tránh đặt đường dẫn cho nó để trong chế độ xem chỉnh sửa, 'form_for' trông giống như' form_for (@user) này ' – ronatory

Các vấn đề liên quan