【问题标题】:How to call a Model in unassociated controller/view如何在未关联的控制器/视图中调用模型
【发布时间】:2014-06-08 17:35:35
【问题描述】:

如何在单独的控制器/视图中调用模型?

I.E.我有一个用户模型,在我的静态控制器中,在主方法/视图中,我想调用 @user 来获取注册表单。当我这样做时,它会引发无方法错误。有没有解决的办法?

我正在使用设计。

静态控制器

class StaticController < ApplicationController
  def home
    @user = User.new
  end
end

Home.html.erb

<%= simple_form_for @user do |f| %>
    <%= f.input :email %>
    <%= f.button :submit %>
<% end %>

用户模型

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :trackable, :validatable

  protected 
    def password_required? 
         false 
    end 

end

以下解决方案不起作用。我得到一个

NOMETHODERROR in STATIC#HOME
undefined method `users_path' for #<#<Class:0x007fe888125480>:0x007fe8881247d8>

关于为什么会这样的任何想法?

【问题讨论】:

  • 您的 routes.rb 文件中有资源 :users 吗?这就是创建这些辅助路径的原因
  • 哇。我有 devise_for :users。为用户添加了资源,效果很好。它的小东西......

标签: ruby-on-rails ruby-on-rails-4 simple-form


【解决方案1】:

您收到的错误消息似乎表明 users_path 没有帮助方法

如果您将以下行添加到您的 config/routes.rb 文件,那么该辅助方法将可用。 config/routes.rb 文件中的条目是创建这些辅助路径的原因。

resources :users

这里也是一个查看链接。 http://guides.rubyonrails.org/routing.html

【讨论】:

    【解决方案2】:

    在静态控制器中你只需要创建一个用户实例

    class StaticController < ApplicationController
       def home
          @user = User.new
       end
    end
    

    现在,静态/home.html.erb

    <%= @user.inspect %>
    

    会起作用,因此您可以将它与simple_form 等一起使用。

    如果您是有意从头开始编写用户注册,那很酷,否则您可能想查看devise gem。

    【讨论】:

    • 现在确实出现了,但是 simple_form 抛出了一个错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2014-11-08
    • 2012-05-16
    相关资源
    最近更新 更多