1

我刚做了一个rails g scaffold Feedback feedback:string user_id:integer。当我转到 0.0.0.0:3000/feedbacks/new 时,一切正常。但是当我尝试将反馈表单放入模态框时,我收到了这个错误:undefined method "model_name" for NilClass:Class. 我已经用谷歌搜索了这个问题,但找不到有效的解决方案。

有人知道这可能是什么解决方案吗?

反馈/_form.html.erb(我使用 simple_form)

<%= simple_form_for(@feedback) do |f| %>
  <%= f.error_notification %>

  <div class="form-inputs">
    <%= f.input :feedback %>
    <%= f.input :user_id %>
  </div>

  <div class="form-actions">
    <%= f.button :submit %>
  </div>
<% end %>

反馈/new.html.erb

<h1>New feedback</h1>
<%= render 'form' %>
<%= link_to 'Back', feedbacks_path %>

反馈/_feedback_modal.html.erb

<div id="activate_feedback_modal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-body">
        <%= render "feedbacks/form" %>
    </div>
</div>

feedbacks_controller.rbnewcreate动作)

class FeedbacksController < ApplicationController
  def new
    @feedback = Feedback.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @feedback }
    end
  end

  def create
    @feedback = Feedback.new(params[:feedback])

    respond_to do |format|
      if @feedback.save
        format.html { redirect_to @feedback, notice: 'Feedback was successfully created.' }
        format.json { render json: @feedback, status: :created, location: @feedback }
      else
        format.html { render action: "new" }
        format.json { render json: @feedback.errors, status: :unprocessable_entity }
      end
    end
  end
end

lelist.html.erb(我渲染模态的地方)

<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" %>
4

4 回答 4

1

您必须在调用模态的控制器操作中定义@feedback。

于 2013-07-02T16:16:05.040 回答
1

呈现 lelist-view 的控制器中的 lelist 操作应具有:

@feedback = Feedback.new

这就是为什么:

在创建表单之前,在这种情况下,对于“反馈”,您必须创建此模型的新实例:( @feedback = Feedback.new)

使用此实例的所有属性生成表单。

url 路由到控制器上的操作,并从那里呈现视图。因此,使用模态渲染页面的操作应该始终创建模型的这个新实例。

我希望这能让它更清楚一点,很难解释这么简单的事情。最重要的是:

您在视图中使用的每个变量都必须在呈现该视图的操作中创建。

于 2013-07-02T16:21:10.210 回答
0

是我吗,但您_form.html.erb有以下内容:

<%= simple_form_for(@feedback) do |f| %>

但是在你的控制器中class FeedbacksController < ApplicationController

所以说当你打电话给你的表格并给出它@feedback而不是@feedbacks。此外,在渲染部分时,应该很可能看起来像这样:

<%= render :partial => "form", :locals => { :feedbacks=> @feedbacks} %>

还可以查看 ruby​​ on rails 指南第3.4.4 节 - 传递局部变量

于 2013-07-02T16:15:07.253 回答
0

我猜它在您的部分中找不到 @feedback 变量。所以最好传递变量。

<%= render 'form', :feedback => @feedback%>

在您的反馈/_form.html.erb

<%= simple_form_for(feedback) do |f| %>
于 2013-07-02T16:24:41.883 回答