Ruby on rails Rails:未定义的方法`model_name';班级:班级
我刚刚做了一个Ruby on rails Rails:未定义的方法`model_name';班级:班级,ruby-on-rails,modal-dialog,simple-form,Ruby On Rails,Modal Dialog,Simple Form,我刚刚做了一个railsgscaffold反馈:stringuser\u id:integer。当我转到0.0.0.0:3000/反馈/新建时,一切正常。但是当我尝试将反馈表单放入一个模态中时,我得到了以下错误:未定义NilClass:Class的方法“model\u name”。我用谷歌搜索了这个问题,但找不到有效的解决方案 有人知道解决这个问题的办法吗 反馈/_form.html.erb(我使用简单的表单) lelist.html.erb(我在其中呈现模态) 是我,但您的\u form.ht
railsgscaffold反馈:stringuser\u id:integer
。当我转到0.0.0.0:3000/反馈/新建时,一切正常。但是当我尝试将反馈表单放入一个模态中时,我得到了以下错误:未定义NilClass:Class的方法“model\u name”
。我用谷歌搜索了这个问题,但找不到有效的解决方案
有人知道解决这个问题的办法吗
反馈/_form.html.erb(我使用简单的表单)
lelist.html.erb(我在其中呈现模态)
是我,但您的
\u form.html.erb
中有以下内容:
<%= simple_form_for(@feedback) do |f| %>
还可以查看ruby on rails指南部分您必须在调用模态的控制器操作中定义@feedback。控制器中呈现lelist视图的lelist操作应具有:
@feedback = Feedback.new
这就是为什么:
在创建表单之前,在本例中为“反馈”,您必须创建此模型的新实例:(@Feedback=Feedback.new
)
表单是使用此实例的所有属性生成的
url路由到控制器上的操作,并从那里呈现视图。因此,使用模式呈现页面的操作应该始终创建模型的这个新实例
我希望这能让事情更清楚一点,这么简单的事情很难解释。最重要的是:
视图中使用的每个变量都必须在呈现该视图的操作中创建。我想它在您的局部视图中找不到@feedback变量。 所以最好传递变量
<%= render 'form', :feedback => @feedback%>
@feedback%>
在您的反馈中/_form.html.erb
<%= simple_form_for(feedback) do |f| %>
在哪里渲染模态?可能无法从模式视图访问@反馈
,因此它是nil
。form\u helper
尝试从nil
类生成url,该类为nilClass
,不具有model\u name
属性。控制器中的lelist
操作(呈现lelist视图的,是否有@feedback=feedback.new
?是的!这是@Tim。我刚刚在操作中添加了'@feedback=feedback.new'。谢谢!将此作为答案发布,我会接受它:)(我对rails有点陌生,你能给我一个简短的解释或链接,我可以在哪里阅读我为什么要这么做?).其实很简单,我会把它添加到我的答案中!再次感谢你的解释!
<div class="lelist_body">
<div class="container" id="dk">
<% if current_user %>
<div class="row">
<div class="span6 offset3" id="user_post_area_button">
<a class="big_fat_feedback_button" href="#activate_feedback_modal" data-toggle="modal">feedback</a>
</div>
</div>
<% end %>
<%= render 'pages/singlePost' %>
</div>
<div class="row">
<div class="span6 offset3">
<%= will_paginate @posts %>
</div>
</div>
</div>
<%= render "feedbacks/feedback_modal" %>
<%= simple_form_for(@feedback) do |f| %>
<%= render :partial => "form", :locals => { :feedbacks=> @feedbacks} %>
@feedback = Feedback.new
<%= render 'form', :feedback => @feedback%>
<%= simple_form_for(feedback) do |f| %>