【问题标题】:undefined method `model_name' for NilClass:Class on viewNilClass 的未定义方法“model_name”:视图中的类
【发布时间】:2013-05-21 13:40:41
【问题描述】:

我的代码在本地服务器上运行,但在生产服务器上不运行。我无法弄清楚我做错了什么。请帮助我。

这是我的部分错误:

 <%=form_for @shiftchange, :url => { :controller=>"schedulers" ,:action => "shift_change" },:validate=>true , :method => :post do |f|%>

       <%= f.label :from_date , "From Date " %>
       <%= f.text_field :from_date ,:class =>'datepicker' %>
   <% end %>

要加载部分,这就是我正在做的:-

<%= render "schedule_shift" %>

在控制器中我有这个:

@shiftchange = Shiftchange.new

【问题讨论】:

  • 您在生产服务器中遇到的错误是什么?
  • @AmitThawait 未定义方法 `model_name' 用于 NilClass:Class

标签: ruby-on-rails ruby-on-rails-3


【解决方案1】:

如果表单包含在多个操作(页面)中,您需要将 @shiftchange 设置为某个值,否则 form_for 指令将失败(它不会为任何内容创建表单)。

更好的方法(也是 Rails 的默认设置)是为每个操作设置单独的视图,每个视图仅包含该操作所需的元素,并使用 &lt;%= yield %&gt;. 加载到您的 application.html.erb 布局中,因此您将有一个 @ 987654325@ 视图,其中包含表单。你从来不需要在 Rails 中定义任何加载路径,它们都来自model, controller and action 名称 - 或来自你的routes.rb。这是 convention over configurationhttp://en.wikipedia.org/wiki/Convention_over_configuration 范式的核心部分,它在 Rails 中运行得如此之深。

如果您确实需要在每个页面上创建一个新对象的表单(例如,通常用于 ShiftchangeSessions),您可以重写您的 form_for,使其不依赖于存在的对象:

form_for(Shiftchange.new)

或者如果你需要强制它发布到 create 方法

form_for(Shiftchange.new, :url => { :action => "create" }) 

您可以在 Ruby On Rails API 文档 http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for-label-Resource-oriented+style 中阅读有关资源驱动 form_for 的更多信息。

【讨论】:

    【解决方案2】:

    改变

    form_for @shiftchange
    

    为此

    form_for :shiftchange
    

    我猜它有效

    【讨论】:

    • 现在它给了我这个错误 ActionView::Template::Error (Using form_for(:name, @resource) is not supported with ClientSideValidations。请使用 form_for(@resource, :as => :name ) 代替。):
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多