2016-09-12 2 views
5

나는 book을 사용하여 Ruby on Rails를 배우고 있습니다. here에서 두 번째 운동을 계속합니다.부분적으로 경로를 사용하는 변수

내 양식 부분 app/views/users/_form.html.erb은 다음과 같습니다

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

내 편집보기 app/views/users/edit.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이있다 내 문제는 내가 어떤 올바른 경로인지 모르겠다. r 편집보기 나는 와 함께 설정해야 방법을 제공합니다.

signup_path 가입보기에는 문제가 없습니다. 내가 편집보기를 시도하는 것입니다 : (현재 코드 예제에서)

  • user_path
  • edit_user_path
  • edit_user_path(@user) 현재 라우팅 오류 나는 아래

(사용자 개체를 전달할 수) 있어 :

enter image description here

아래 사용자와 관련된 가능한 경로 것을 :

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

예를 들어 내가 URL을 제공하기 위해 편집보기를 제공 사용하지 않는 경우는, 여기처럼 잘 작동

하지만 partials를 사용하여 코드를 리팩터링하는 것이므로 가입보기 URL을 제공해야합니다. 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

당신이 부분을 게시 할 수있는이 내 작업 솔루션입니다 사용자의 경로를 설정하는 routes.rb 파일의 위치는? – mrzasa

+0

활성 레코드와 함께 레일과 그 양식이 어떻게 작동 하는지를 살펴볼 필요가 있습니다. 모형으로 비계 컨트롤러를 생성하십시오. 당신은 무의식적으로 빨리 배울 것입니다. –

+0

는'routes.rb' @mrzasa – ronatory

답변

2

결국 두 번째 연습 here에서 필요한 URL을 전달하기 위해 URL은 user_path과 함께 작동합니다. 내가 내 질문에 언급했듯이 나는 이미 user_path으로 시도했지만, 내가 보지 못한 것은 url을 포함하기 위해 부분적으로 yield(:path) 형태로 사용했기 때문에 가입보기에 대한 내 질문을 볼 때 변수를 제공했다. 오른쪽은 <% provide(:path, signup_path) %>이지만 편집보기에서는 <% provide(:url, user_path) %>을 사용했습니다. 따라서 편집보기에서 올바른 경로를 제공 할 수 없다는 것을 분명히 알 수 있습니다. 필자가 시도한대로 볼 수있는 것처럼 올바른 경로를 설정하더라도.

자신이 시도한 후에도 운동을 계속 한 사람들은 을 정확하게 입력하고 변수를 올바르게 지정했는지 확인하십시오..

양식이 부분 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 가입보기 :

<% 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 편집보기 :

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

당신은 경로를 선언 할 필요가 없습니다. resources :users을 사용하는 경우 응용 프로그램에서 경로를 설정하는 방법을 알 수 있습니다.당신이 선언하면 :

new_user_path 

하지만 당신은 선언하는 경우 :

@user = User.new 

경로가 될 것입니다

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

경로가 될 것입니다 :

user_path(id) 

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

+0

'resources : users'를 사용하여 경로를 선언 할 필요가 없다는 것을 이해합니다. 그러나이 경우 가입보기와 수정보기를 제공해야합니다. 따라서 가입보기에는 url이 필요합니다.이 경우에는 'signup_path'가 필요합니다. 이를 제공하기 위해 나는 ** form 부분에 ** signup_path와 함께이'form_for (@user, '/ signup')'를 설정했습니다. 문제는 지금 내가 편집 질문에 대한 올바른 경로입니다 내 질문에 설명되어 있거나 편집보기에서'form_for'이'form_for (@user)와 비슷해 보이도록 경로를 설정하는 것을 피할 수 있습니까? ' – ronatory