【问题标题】:Ruby on Rails - Edit not workingRuby on Rails - 编辑不起作用
【发布时间】:2014-04-09 13:29:23
【问题描述】:

我有 3 个模型 USER、EXPERT、HELPEE,如下面的截图所示:

我在用户模型上使用设计。

关系

class Expert < ActiveRecord::Base
  belongs_to :user

class Helpee < ActiveRecord::Base
  belongs_to :user

class User < ActiveRecord::Base
  has_one :expert
  has_one :helpee

我正在使用以下代码进行注册,效果很好:

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
  <%= devise_error_messages! %>

  <div><%= f.label :name %><br />
  <%= f.text_field :name, :autofocus => true, :class => "form-control" %></div>

  <div><%= f.label :email %><br />
  <%= f.email_field :email, :class => "form-control" %></div>

  <div><%= f.label :password %><br />
  <%= f.password_field :password, :class => "form-control" %></div>

  <div><%= f.label :password_confirmation %><br />
  <%= f.password_field :password_confirmation, :class => "form-control" %></div>
  <br>

  <div><%= f.hidden_field :role, value: "helpee" %><br />

  <div><%= f.submit "Sign Up" , :class => "btn btn-primary"%></div>
<% end %>

但同样的逻辑不适用于 EDIT。

您能否建议如何创建 EDIT 表单?

【问题讨论】:

  • same logic is not working for EDIT?它怎么不工作?你试过什么?您已经从 Devise 获得了现成的编辑页面?问题出在哪里?
  • registration_path(resource_name) => 您应该将资源实例传递给 URL 助手,而不是资源名称。给它一个已经有 id 的记录,它应该更新它
  • @MrYoshiji registration_path(resource_name) 在设计中是正确的方式。请参阅设计注册表以进行编辑github.com/plataformatec/devise/blob/…
  • @KirtiThorat 哦,我明白了,我应该使用 Devise 几次...嘿,您知道您是本月所有 Stackoverflow 声誉增长的第四名吗?请参阅stackexchange.com/leagues/1/month/stackoverflow/2014-04-01/…(2,535 个月声誉):恭喜!
  • @MrYoshiji 谢谢!! :)

标签: ruby-on-rails forms devise


【解决方案1】:

根据您最初用于registration 的问题中的共享视图,并且您对edit 表单使用相同的逻辑,那么您需要使用form_for,如下所示:

<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %>

您需要提供 method: :put 才能使其在 EDIT 上运行。

注意:

使用此逻辑,您不能对createedit 使用相同的form_for 定义。这意味着您必须有两个单独的视图,一个处理新注册,另一个用于编辑现有注册。

【讨论】:

  • 谢谢柯蒂。我从 /helpees/id/edit 尝试了这个,但它把我带到 localhost:3000/users 并出现错误“当前密码不能为空”,然后向我显示一个包含电子邮件、密码和密码确认字段的表单。我认为这是由设计引起的一些行为,不确定是什么导致了这个或如何解决它。任何帮助,将不胜感激。此外,我在为 EDIT 构建的不同视图中执行此操作,而不是在注册视图中。
  • 使用设计,如果您尝试更新用户记录,则必须输入当前密码。这是编辑页面上的默认行为。如果您想在没有密码的情况下更新用户记录,请遵循此处的指南github.com/plataformatec/devise/wiki/…
  • 这是我的编辑表单imgur.com/m1Zeqn8。在我进行更改后,它会变成:imgur.com/Dr43uoi。我是否需要在我的编辑表单上添加另一个特定于设计的“当前密码”字段或其他内容才能正常工作?
  • 这些字段用于设置new passwordpassword confirmation。您需要另一个字段来输入current_passowrd。参考设计编辑注册视图github.com/plataformatec/devise/blob/master/app/views/devise/…
  • 我为当前密码添加了以下代码,但这些值没有被保存:
    (我们需要您的当前密码来确认您的密码)更改)
【解决方案2】:

引用:

对于这一系列非常长的查询,我很抱歉,我已经尝试过喂 当前密码,但仍然没有注册更改 我收到一条成功警报消息 – samikb 14 小时前

/结束引用

无法添加评论,因此请在此处回复。 检查您的应用程序控制器。由于您的注册过程正在运行,您应该有一个用于注册的 Sanitized Parameters 方法。像这样的:

def configure_permitted_parameters
          devise_parameter_sanitizer.for(:sign_up) do |u|

确保您也有类似的更新。 像这样的:

devise_parameter_sanitizer.for(:account_update) do |u|

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多