用于NilClass的未定义方法`model_name':视图上的类

时间:2013-05-21 13:40:42

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

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

这是我在偏见中遇到错误的地方:

 <%=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

2 个答案:

答案 0 :(得分:0)

更改

form_for @shiftchange

这个

form_for :shiftchange

我猜它有效

答案 1 :(得分:0)

如果包含多个操作(页面)的表单,则需要将@shiftchange设置为某些内容,否则form_for指令将失败(它将无法创建任何表单)。

更好的方法(以及Rails默认设置)是为每个操作设置单独的视图,每个视图仅包含该操作所需的元素,并使用application.html.erb加载到<%= yield %>.布局中会有一个app/views/shiftchanges/new.html.erb视图,其中包含表单。您永远不需要在Rails中定义任何加载路径,它们都来自model, controller and action名称 - 或来自您的routes.rb。这是convention over configuration http://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的更多信息。