我有一个包含帖子,评论和问题的项目。评论属于帖子,问题属于评论。我试图显示属于页面评论的所有问题。但是,索引页面不显示任何问题。它不会给出错误但只是空白。
这是我的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,所以这不是问题所在。 我真的很感激任何帮助。
答案 0 :(得分:1)
你的部分使用未定义的变量,这是你的主要问题。但是你也不应该在partials中引用实例变量,因为这会增加partial和controller之间的耦合。试试这个:
<%= div_for(question) do %>
<%= question.body %>
<% end %>
这是真正的伎俩。通过将集合传递给partial,我们可以在传递名为question
的局部变量时自动迭代它,这正是我们想要的。
<%= render @questions %>
有关使用partials渲染集合的更多信息,请参阅Layouts and Rendering上的Rails指南页面。
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变量。