gpt4 book ai didi

ruby-on-rails - 变量传递以在部分中使用路径

转载 作者:数据小太阳 更新时间:2023-10-29 07:16:43 25 4
gpt4 key购买 nike

我正在使用这个 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 %>

我的部分注册 View 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>

我的编辑 View 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 方法设置编辑 View 的正确路径。

使用 signup_path 它可以很好地用于注册 View 。我为编辑 View 尝试的是:

  • user_path(目前在代码示例中)
  • edit_user_path
  • edit_user_path(@user)(传递用户对象)

下面是我得到的当前路由错误:

enter image description here

下面是与用户相关的可用路由:

enter image description here

例如,如果我不使用 provide 来为编辑 View 提供 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 %>

但目标是使用部分重构代码,因此我需要为注册 View 提供一个 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

最佳答案

所以最后根据第二个练习的要求传递所需的 url here , 它只提供 user_path .正如我在问题中提到的,我已经用 user_path 试过了。 , 但我没有看到的是我以部分 yield(:path) 的形式使用了, 以嵌入 url,因此当您查看我的注册 View 问题时,我提供了带有 <% provide(:path, signup_path) %> 的变量权利,但在编辑 View 中我使用了 <% provide(:url, user_path) %> .所以很明显,我无法从编辑 View 提供正确的路径,即使我设置了正确的路径,正如您在我的尝试中所描述的那样。

因此,对于那些在自己尝试并准确查看变量分配是否正确之后也卡在该练习中的人。这是我的工作解决方案:

表格部分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 %>

注册 View 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>

编辑 View 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>

关于ruby-on-rails - 变量传递以在部分中使用路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39445560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com