加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 变量传递给部分使用路径

发布时间:2020-12-17 03:10:33 所属栏目:百科 来源:网络整理
导读:我正在使用这个 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
我正在使用这个 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 with partial是这样的:

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

我的问题是我不知道我必须使用提供方法设置编辑视图的哪条路径.

使用signup_path,它可以正常用于注册视图.我为编辑视图尝试的是:

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

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

enter image description here

以下是与用户相关的可用路线:

enter image description here

例如,如果我不使用提供编辑视图来提供网址,它就像这样工作正常:

<%= form_for(@user) do |f| %>
  <%= render 'shared/error_messages',class: "btn btn-primary" %>
<% end %>

但目标是使用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

解决方法

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

因此,对于那些在自己尝试之后并且在确切地确定您是否正确分配变量之后也坚持锻炼的人.这是我的工作解决方案:

表单部分app / views / users / _form.html.erb:

<%= form_for(@user,class: "btn btn-primary" %>
<% end %>

注册视图app / views / users / new.html.erb:

<% provide(:title,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,"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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读