使用rails 4.2.0。
查看: users/edit.html.erb
视图用于访问用户控制器/型号的帐户设置。应用程序中正在使用Devise,但devise/registrations.edit.html.erb
视图正用作更改密码表单。
如果我通过其URL / users /:id / edit导航到我的帐户设置页面并进行编辑,则表单会正确提交并更新属性。
问题:
如果您从链接到达该页面,则表单不会提交。
<%= link_to "Account settings", edit_user_path(current_user) %>
users/edit.html.erb
查看加载相对路线:
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
可能性:
我以前从未见过这种情况。关于解决方案的任何帮助/想法,或者如何更好地调试?
EDIT1:
users/edit.html.erb
查看:
<% provide(:title, "Account Settings") %>
<div class="row">
<div class="small-12 columns">
<h2>Account settings</h2>
</div>
</div>
<div class="row">
<%= form_for(@user) do |f| %>
<%= devise_error_messages! %>
<div class="small-3 columns">
<%= gravatar_for(@user, :size => 500) %>
<%= link_to "Upload", "#", :class => "button tiny expand" %>
</div>
<div class="small-8 columns small-offset-1">
<div class="field">
<%= f.label :first_name %>
<%= f.text_field :first_name %>
</div>
<div class="field">
<%= f.label :last_name %>
<%= f.text_field :last_name %>
</div>
<div class="field">
<%= f.label :email %>
<%= f.text_field :email %>
</div>
<div class="field">
<%= f.label :profile_description %>
<%= f.text_field :profile_description %>
</div>
</div>
</div>
<div class="row">
<div class="small-1 columns settings-icons-container">
<%= image_tag 'icons/facebook.png', class: 'social-settings-icons' %>
<%= image_tag 'icons/twitter.png', class: 'social-settings-icons' %>
<%= image_tag 'icons/google-plus.png', class: 'social-settings-icons' %>
</div>
<div class="small-4 small-pull-7 columns">
<h5>Social media links</h5>
<!-- REPLACE WITH ERB -->
<input type="text" for="facebook">
<input type="text" for="twitter">
<input type="text" for="website">
</div>
</div>
<div class="row">
<div class="small-3 columns">
<%= link_to "Change password", edit_user_registration_path, :class => "button tiny expand radius" %>
</div>
</div>
<div class="row">
<div class="small-3 columns actions ">
<%= f.submit "Save changes", :class => "button expand radius small-3 columns" %>
<% end %>
</div>
</div>
答案 0 :(得分:1)
看起来您可能需要在表单中包含该方法:
<%= form_for(@user) do |f| %>
到
<%= form_for(@user, method: :put) do |f| %>
答案 1 :(得分:1)
这是对这部分问题的回答:有关如何更好地调试的任何帮助/想法?
表单问题的有用调试工具是在浏览器中打开页面。选择查看页面源并搜索字符串“form”以确切了解代码生成的html。
例如,这是我的一个表单中的html:
<div class="form-inline">
<div class="row">
<form id="search-form" class="form-group" action="/locations" accept-charset="UTF-8" method="get"><input name="utf8" type="hidden" value="xxx" />
<div class="input-group input-group-sm gx_ml_10 gx_mr_10">
<input type="text" name="search" id="search" placeholder="Search for BBQ" class="form-control" />
<span class="input-group-btn input-group-sm">
<button type="submit" class="btn btn-primary">
<span class="glyphicon glyphicon-search" aria-hidden="true"></span>
</button></span>
</div> <!-- "input-group" -->
</form>
</div> <!-- row -->
</div> <!-- "form-inline" -->
特别是在您要查找的表单部分的html中:
<button type="submit" ...
没有它,你没有表单行动。
<强>加/修订强>
另一种形式的调试建议是使用警报在运行时查看哈希。要通过直接URL访问与“link_to”访问隔离传递给控制器的内容之间的差异,请检查在两种情况下创建的哈希。将此语句添加到用户控制器编辑块。
flash[:info] = "Hash: #{params} User: #{@user.some_var_like_name}"
答案 2 :(得分:1)
我遇到了类似的问题:每当使用link_to
到达页面时,我都必须刷新表单才能提交。
我通过在data-no-turbolink="true"
视图的正文标记中添加application.html.erb
来解决此问题。