【发布时间】:2017-01-19 14:39:24
【问题描述】:
我正在使用book 学习 Ruby on Rails。 我被困在here 的第二个练习中。
我的表单部分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(: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 方法为 edit view 设置哪个正确路径。
使用 signup_path 它适用于注册视图。我为编辑视图尝试的是:
-
user_path(目前在代码示例中) edit_user_path-
edit_user_path(@user)(传递用户对象)
低于我得到的当前路由错误:
及以下与用户相关的可用路线:
例如,如果我不使用提供编辑视图来提供 url,它可以像这里一样正常工作:
<%= 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 %>
但目标是使用部分重构代码,所以我需要为注册视图提供一个 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
【问题讨论】:
-
您能否将
routes.rb中您为用户设置路径的部分发布? -
您只需要看一下流程,rails 及其表单如何与活动记录一起使用。请继续使用模型生成脚手架控制器。你会很快学会的。
-
添加了
routes.rb@mrzasa -
你在哪里使用
edit_user_path(@user)?必须是get而不是patch -
我没有使用
edit_user_path(@user)。我试过了,但没有用。并且补丁的错误到目前为止一直出现
标签: ruby-on-rails ruby railstutorial.org partials