代码之家  ›  专栏  ›  技术社区  ›  Kieran Senior

Rails页面中的NoMethodError

  •  1
  • Kieran Senior  · 技术社区  · 16 年前

    <h1>Editing user</h1>
    
    <% form_for(@user) do |f| %>
        <%= f.error_messages %>
        <p>
            <%= f.label :forename %><br />
            <%= f.text_field :forename %>
        </p>
        <p>
            <%= f.label :surname %><br />
            <%= f.text_field :surname %>
        </p>
        <p>
            <%= f.label :address %>
            <%= f.text_field :address %>
        </p>
        <p>
            <%= f.label :postcode %>
            <%= f.text_field :postcode %>
        </p>
        <p>
            <%= f.label :contact_number %>
            <%= f.text_field :contact_number %>
        </p>
    <% end %>
    
    <%= link_to 'Show', @user %> |
    <%= link_to 'Back', users_path %>
    

    控制器实际上是AdminController的子类型,因为有一个单独的部分,如下面的类声明所示:

    class Admin::UsersController < ApplicationController
    

    编辑方法如下:

    def edit
        @user = User.find(params[:id])
    end
    

    误差如下:

    undefined method `user_path' for #<ActionView::Base:0x104369fe8>
    

    我的路线如下:

    map.namespace(:admin) do |admin|
        admin.resources :pages
        admin.resources :treatments
        admin.resources :users
        admin.resources :finances
    end
    

    form_for(@user) 就是这样。我以前见过这种情况,但不幸的是不知道如何诊断。

    3 回复  |  直到 16 年前
        1
  •  3
  •   Harish Shetty    16 年前

    由于您使用的是以名称分隔的管线,因此必须在 form_for 调用。

    <% form_for([:admin, @user]) do |f| %>
    

    参考 documentation 更多细节。(提示:请阅读 Resource-oriented style (节)

        2
  •  0
  •   bjg    16 年前

    名称间距是否会改变命名路径,所以可能需要以这样的形式显式显示它?

    form_for (@user, :url => admin_user_path) do |f|
    
        3
  •  0
  •   Suman Mukherjee    16 年前

    对于您正在使用的名称空间….链接

    <% form_for @user, edit_admin_user_path(@user.id) do |f|%>
         .....
    <% end %>
    

    做一个 rake routes 查看命名空间控制器的路由外观