如何在使用link_to后访问RoR中的相关模型?

时间:2017-04-29 15:42:45

标签: ruby-on-rails ruby-on-rails-4

我使用wkhtmltopdf将页面转换为pdf

<%= link_to "download" user_group_assessments_path(@user, @group, @assessment, format: 'pdf') =>

它将转到我的AssessmentsController并调用我的索引方法,它看起来像:

@assessments = Assessment.all 
respond_to do |format|
format.html
format.pdf do
  render pdf: "filename"
  template: "assessments/show.pdf.erb"
 end
 end
 end

在show.pdf.erb中,我访问用户,组和评估。

每件事都没问题,它没有任何问题。但是当我打电话时

<% @assessment.measurements.each do |m| %>
 ...
<% end %>

我收到以下错误:

  

未定义的方法&#39;测量&#39;为零:NilClass

它指向我尝试访问测量的行。

如何访问模型&#39;测量&#39;从这个文件?

4 个答案:

答案 0 :(得分:0)

您需要将评估详细信息发送到您的视图。例如:

respond_to do |format|
  format.html
  format.pdf do
    render pdf: "filename"
    template: "assessments/show.pdf.erb"
    locals: {:assessment => @assesment}
  end
end

然后在您的视图中,评估可以作为

进行访问
<% assessment.measurements.each do |m| %>
  ...
<% end %>

答案 1 :(得分:0)

在控制器中,您的变量为@assessments但是对于迭代,您尝试使用缺少复数@assessment的{​​{1}}。请尝试以下

s

或者,您必须在控制器操作中使用<% @assessments.each do |assessment| %> <% assessment.measurements.each do |m| %> ... <% end %> <% end %> 实例变量。然后你可以使用以下循环

@assessment

答案 2 :(得分:0)

如果您与测量值有关联,请尝试此操作

@assessments = Assessments.joins(:measurements)

并在您的视图中执行此操作

@assessments.each do |assessment| assessment.measurements.each do |measurement| perform operations end end

答案 3 :(得分:0)

正如我上面提到的,我在索引操作中编写了以下代码:

respond_to do |format|
 format.html
  format.pdf do
    render pdf: "filename"
    template: "assessments/show.pdf.erb"
  end
end

但这是错误的,因为我试图访问@assessment,其中@assessment在show action中定义,而不是在index action中。在索引中,所有评估都是定义的,而不是特定的评估。我只需要一个具有特定身份的人。

此外,将代码放在show方法而不是索引中解决了问题。