如果通过其他页面

时间:2015-04-30 19:49:13

标签: ruby-on-rails

使用rails 4.2.0。

查看: users/edit.html.erb视图用于访问用户控制器/型号的帐户设置。应用程序中正在使用Devise,但devise/registrations.edit.html.erb视图正用作更改密码表单。

如果我通过其URL / users /:id / edit导航到我的帐户设置页面并进行编辑,则表单会正确提交并更新属性。

问题:

如果您从链接到达该页面,则表单不会提交。

  1. 我点击&#34;帐户设置&#34;从单独的页面<%= link_to "Account settings", edit_user_path(current_user) %>
  2. 链接
  3. users/edit.html.erb查看加载
  4. 制作并编辑用户/编辑视图中的属性
  5. 点击提交按钮
  6. 表单未提交,未发送POST,按钮无响应。
  7. 相对路线:

               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>
    

3 个答案:

答案 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来解决此问题。

通过查看Form Submit button only works after reload解决了。