【问题标题】:Rails controller method going to plural formRails 控制器方法去复数形式
【发布时间】:2010-05-08 06:33:36
【问题描述】:

我是 Rails 新手!

好的,我正在尝试设置用户注册表单。 它被映射为路线中的单一资源

map.resource :user

并且尝试通过控制台创建用户工作正常。 用户注册的控制器代码如下:

  def signup
    @user = User.new#(params[:user])
  end

 def create
   @user = User.new(params[:user])
   #debugger
   if request.post?  
     if @user.save
       session[:user] = User.authenticate(@user.login, @user.password)
       flash[:message] = "Signup successful"
       redirect_to registries_path          
     else
       flash[:warning] = "Signup unsuccessful"
       #redirect_to 'user/signup'
     end
   end
  end

注册视图如下(这是我认为出了点问题的地方)

<% form_tag user_path do %>
<p>User creation.</p>
<p><%= error_messages_for 'user' %></p>

<p>
    <label>Username:</label>
    <%= text_field_tag 'login', nil, :size => 20, :maxlength => 20 %>
</p>
<p>
    <label>Password:</label>
    <%= password_field_tag 'password', nil, :size => 20, :maxlength => 20 %>
</p>
<p>
    <label>Password confirmation:</label>
    <%= password_field_tag 'password_confirmation', nil, :size => 20, :maxlength => 20 %>
</p>
<p>
    <label>Email:</label>
    <%= text_field_tag 'email' %>
</p>
<p><%= submit_tag 'Signup' %></p>
<% end %>

现在,该页面呈现得很好。我已经在单数的“user_path”上调用了表单(我认为?)。但是当我点击提交按钮时,它给了我一个错误提示

uninitialized constant UsersController

错误的发生是有道理的,因为 User 是单数的,所以如果它试图调用 Users 控制器,它应该抛出一个错误。 当我检查服务器日志时,它显示以下消息:

Processing ApplicationController#create (for 127.0.0.1 at 2010-05-08 16:26:14) [POST]
  Parameters: {"commit"=>"Signup", "password_confirmation"=>"[FILTERED]", "action"=>"create", "authenticity_token"=>"yOcHY+rMjaqmu9HS8EwnDqJKbc0Zxictc0y4dtD26ac=", "controller"=>"users", "login"=>"bob", "password"=>"[FILTERED]", "email"=>"bob@thetester.com"}

NameError (uninitialized constant UsersController):

在参数中,我可以看到它正在调用“用户”控制器。但我不确定如何解决这个问题,或者是什么导致它调用“用户”控制器而不是“用户”控制器。

有什么想法吗? 提前致谢!

【问题讨论】:

    标签: ruby-on-rails controller singular plural


    【解决方案1】:

    用户通常被视为复数,而不是单数。如果您希望它在 RESTful url 中显示为准单数,请尝试像这样设置您的 routes.rb:

    map.resources :users,
                  :as => 'user'
    

    【讨论】:

    • 哦。我认为由于一次只有一个用户(无论如何每个 IP 地址,或其他),单一资源是要走的路。就像某些模型如何将 Session 用作单一资源一样,因为每个人只有一个活动会话?在那种情况下,我可能会去找用户,看看会发生什么。谢谢!
    • 例如,您可以允许用户查看其他用户的个人资料。
    • 好的,我使用了 users 的复数方法,它按照我想要的方式工作。谢谢! :) 会话通常被视为单一资源吗?如果是这样,是否有一个简单的解释为什么这两者被区别对待,甚至可能是一些关于什么通常被视为复数和什么通常被视为单数的信息?
    • 我在 Rails 4.2 中发现 as: :paypal (在我的例子中)会将其复数为贝宝 - 使用字符串文字可以阻止这种情况发生。
    猜你喜欢
    • 2014-04-12
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多