0

我有一个 Rails 应用程序,main_controller用于向我的应用程序的主页提供内容。我想访问一组图像,所以我在控制器中创建了以下方法:

def featured_illustrations
    #future implementation: get images where featred == true
    @featured_illustrations << Illustration.find(152)
    @featured_illustrations << Illustration.find(272)
    @featured_illustrations << Illustration.find(275)

    respond_to do |format|
      format.html
      format.json { render :json => @featured_illustrations }
    end
  end
helper_method :featured_illustrations

我有以下帮手:

module MainHelper
  require MainController
  @featured_illustrations = MainController.featured_illustrations
end

部分代码如下featured_images

<div class="featured">
  <% @featured_illustrations.each do |illustration| %>  
   <!-- somc code to print images -->
  <% end %>
</div>

当我尝试查看页面时出现此错误:

uninitialized constant MainHelper::MainController

我之前没有与助手合作过,因此感谢您提供任何指导。谢谢。

更新:我已删除MainHelper但现在尝试加载页面时出现以下错误:

undefined method `each' for nil:NilClass
Extracted source (around line #2):

1: <div class="featured">
2:   <% featured_illustrations.each do |illustration| %>  
3:     <div class="feature-image" id="feature-one">152</div>
4:     <div class="feature-image" id="feature-two">272</div>
5:     <div class="feature-image" id="feature-three">275</div>

对原因有什么想法吗?

4

1 回答 1

0

简单的答案:在您发布的错误中,您似乎没有迭代正确的变量。您已将特色插图分配给实例变量(它们以 @ 开头),而不是您正在使用的局部变量。

改变:

<% featured_illustrations.each do |illustration| %>

至:

<% @featured_illustrations.each do |illustration| %>

但是,如果您所做的只是设置一个实例变量以在部分中访问,我不确定为什么在这里需要一个帮助器。

在您featured_illustrations中,您正在设置实例变量。我不确定您在渲染部分给定名称时使用的操作是什么featured_images

我会建议:

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

def featured_illustrations
  @featured_illustrations = Illustration.where(featured: true)

  respond_to do |format|
    format.html
    format.json { render :json => @featured_illustrations }
  end
end

app/views/main/featured_illustrations.html.erb

<div class="featured">
  <% @featured_illustrations.each do |illustration| %>  
    <!-- somc code to print images -->
  <% end %>
</div>

这是假设您已将路由文件设置为正确路由到主控制器以使用特色插图方法。就像是:

match '/featured_illustrations/', to: 'main#featured_illustrations'

最后,如果您还没有这样做,您可能想看看 Rails 如何使用 REST 和资源丰富的路由。您可以在Rails 入门指南中找到很多内容。

于 2013-07-27T16:22:43.677 回答