Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么我的@results测验对象为零?_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 为什么我的@results测验对象为零?

Ruby on rails 为什么我的@results测验对象为零?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我将以下内容传递到results/index.html.erb视图: def create @results = Quiz.where(user_id: current_user.id) redirect_to results_path end (我已将上述操作更改回创建) 然后,在我的results/index.html.erb视图中: <div class="container"> <!-- Example r

我将以下内容传递到
results/index.html.erb
视图:

 def create
        @results = Quiz.where(user_id: current_user.id)
            redirect_to results_path
    end
(我已将上述操作更改回创建)

然后,在我的
results/index.html.erb
视图中:

<div class="container">
      <!-- Example row of columns -->
      <div class="row">
        <h1>Results page</h1>
        <div class="col-md-12">
          <p>Eventually a user's results will appear here...</p>
          <p><%= @results %></p>
          <p><%= @results.inspect %></p>
          <p><%= current_user.quiz %></p>
             <h4>Quiz Answer</h4>
             <p><%= @results.answer1 %></p>
             <p><%= @results.answer2 %></p>
             <p><%= @results.answer3 %></p>
             <p><%= @results.answer4 %></p>
             <p><%= @results.answer5 %></p>
             <p><%= @results.answer6 %></p>
             <p><%= @results.answer7 %></p>
             <p><%= @results.answer8 %></p>
        </div>
      </div>

      <footer>
        <p><a class="btn btn-default" href="showmetheskills.html" role="button">next</a></p>
      </footer>
    </div> <!-- /container -->
为什么当我在Rails要求的操作中设置它时,
@results
nil

测验
是在
测验控制器
中创建的:

def new
    @user = current_user
    @quiz = Quiz.create(user_id: current_user.id)
end
这将触发
quizzes/new.html.erb
,从而使测验部分化


有什么问题吗?

@results
为零,因为您执行了重定向。或者渲染视图

def update
  @results = Quiz.where(user_id: current_user.id)
  render: 'results#index'
end
或者重定向并在那里获得结果,这将是我的首选选项,但我想问,为什么您不更新任何内容就将它们发送到更新操作

def update
  redirect_to results_path
end

def ResultsController
  def index
    @results = Quiz.where(user_id: current_user.id)
  end
end
无论哪种方式,像
@results.answer1
这样的东西都不起作用,因为您有一个活动记录关系。你要么需要循环

<% @results.each do |result| %>
  <%= result.answer1 %>
<% end %>

或者抓住第一个结果


@results=quick.where(user\u id:current\u user.id)。首先

在您的例子中,
@results
是一个数组,您在同样不存在的数组上调用一些
answer1、answer2、answer3…
方法(我想还没有定义)

下一步:

在更新操作中初始化
@results
,但希望它在
resuzlts/index.html.erb
中工作

要在索引html中显示
@结果
,您需要在
索引
操作中加载此变量

更新

如果你想让你的
索引
动作显示一些东西,请写这行:

@results = Quiz.where(user_id: current_user.id)
采取指数行动

def index
  # here
end
然后从
index.html.erb
中删除
answer1、answer2、answer3….
,它们真的毫无意义。 另外,
index.html.erb
应该如下所示:

<div class="col-md-12">
  <p><%= current_user.quiz %></p>
  <h4>Quiz Answer</h4>

  <% @results.each do |result| %>
    <p><%= result.answer %></p>
  <% end %>
</div>

测验答案


只有在为结果定义了
answer
时,这才有效。很难说你的应用程序中是什么。

我可以问你如何知道@结果是数组吗?因为你在一个类上调用了
.where
,该类将返回符合你条件的对象数组(user\u id=current\u user.id)。从这个人开始
<div class="col-md-12">
  <p><%= current_user.quiz %></p>
  <h4>Quiz Answer</h4>

  <% @results.each do |result| %>
    <p><%= result.answer %></p>
  <% end %>
</div>