index.html.erb不显示内容

时间:2013-09-02 01:35:13

标签: ruby-on-rails

我有一个包含帖子,评论和问题的项目。评论属于帖子,问题属于评论。我试图显示属于页面评论的所有问题。但是,索引页面不显示任何问题。它不会给出错误但只是空白。

这是我的questions_controller.rb:

   class QuestionsController < ApplicationController
 before_action :set_question, only: [:show, :edit, :update, :destroy]


def index
  @comment = Comment.find params[:comment_id]
  @comment.questions
end


def show
end


def new
  @comment = Comment.find params[:comment_id]
end


def edit
end


def create
  @comment = Comment.find(params[:comment_id])
  @question = @comment.questions.create(question_params)

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

索引文件调用_question.html.erb partial:

<%=div_for(@question) do %>
<%= @question.body %>
<% end %>

index.html.erb文件:

<%= render "questions/question" %>

最后,索引页面的链接如下所示:

<%= link_to 'View Questions', comment_questions_path(comment)%>

我已经检查过并且问题正在保存到db,所以这不是问题所在。 我真的很感激任何帮助。

2 个答案:

答案 0 :(得分:1)

你的部分使用未定义的变量,这是你的主要问题。但是你也不应该在partials中引用实例变量,因为这会增加partial和controller之间的耦合。试试这个:

应用程序/视图/问题/ _question.html.erb

<%= div_for(question) do %>
  <%= question.body %>
<% end %>

应用程序/视图/问题/ index.html.erb

这是真正的伎俩。通过将集合传递给partial,我们可以在传递名为question的局部变量时自动迭代它,这正是我们想要的。

<%= render @questions %>

有关使用partials渲染集合的更多信息,请参阅Layouts and Rendering上的Rails指南页面。

应用程序/控制器/ questions_controller.rb

class QuestionsController < ApplicationController
  before_action :set_question, only: [:show, :edit, :update, :destroy]

  def index
    @comment = Comment.find params[:comment_id]
    @questions = @comment.questions
  end
end

答案 1 :(得分:0)

您尚未在控制器中的任何位置定义@question变量,并且您在视图中使用它,因此它将为空白并显示为空白。

在questions_controller.rb中尝试此代码

class QuestionsController < ApplicationController
 before_action :set_question, only: [:show, :edit, :update, :destroy]

  def index
    @comment = Comment.find params[:comment_id]
    @questions = @comment.questions
  end
  ...
end

在视图中使用@questions变量。