未初始化的常量ActionView :: CompiledTemplates :: BlogPost

时间:2018-01-25 22:18:14

标签: ruby-on-rails

所以我在blog_posts.rb模型中有以下内容:

class BlogPost::Fetch < ActiveRecord::Base
API_URI = "http://blog.url.com/rss.xml".freeze

def class 
    posts = Rails.cache.fetch(API_URI, expires_in: 10.minutes) do
        begin 
         feed = Feedjira::Feed.fetch_and_parse API_URI
         feed.entries.take(2)
    rescue
        []
    end
end
    posts
end

我的视图助手中的以下内容:

module BlogHelper
def fetch_blog_posts(entries)
posts.each do |post|
  unless exists? :guid => post.id
    create!(
      :title => post.title,
      :pubDate => post.date
    )
  end
end
end
end 

然后在我看来:

<% BlogPost.fetch_blog_posts(2).each do |post| %>
                    <div class="home-blog-post">
                        <div class="news-date">
                            <%= post.display_date %>

有了这个礼物,我最终得到了未初始化的常量ActionView :: CompiledTemplates :: BlogPost。

我错过了什么?我觉得这很简单,我只是没有看到。

编辑: 我也尝试了以下内容:

  • 在我的模型中添加了包含ActiveRecord :: Helpers,并将视图更改为BlogPost :: Fetch。同样的错误
  • 将我的帮助方法放入模型中,并在视图中使用BlogPost :: Fetch和BlogPost。两者都有相同的错误。
  • 将我的模型从继承ActiveRecord :: Base更改为Operator。同样的错误。

我唯一一次遇到不同的错误就是当我将模型名称更改为blog_post.rb时出现循环错误。

另一个编辑: 我从视图助手那里取出了所有内容,因为它毫无意义。我没有在CMS中使用控制器。所以名为fetch.rb的模型现在具有以下内容:

class BlogPost::Fetch < ActiveRecord::Base
API_URI = 'http://blog.url.com/rss.xml'.freeze

def call
posts = Rails.cache.fetch(API_URI, expires_in: 10.minutes) do
  begin
    feed = Feedjira::Feed.fetch_and_parse API_URI
    feed.entries.take(2)
  rescue
    []
  end
end
posts
end

def fetch_blog_posts
 @posts = BlogPost::Fetch.run.result
end
end

然后在视图中:

<% BlogPost.fetch_blog_posts(2).each do |post| %>
                    <div class="home-blog-post">
                        <div class="news-date">
                            <%= post.display_date %>
                        </div>
                        <%= link_to post.title, blog_post_path(post.url_name), class: 'news-title' %>
                    </div>

仍然遇到同样的错误。

所以我尝试将我的观点改为:

<% @posts(2).each do |post| %>
                    <div class="home-blog-post">
                        <div class="news-date">
                            <%= post.display_date %>
                        </div>
                        <%= link_to post.title, blog_post_path(post.url_name), class: 'news-title' %>
                    </div>

在这种情况下,我最终得到以下错误:语法错误,意外'(',期待keyword_end'.freeze; @posts(2).each do | post | ^

1 个答案:

答案 0 :(得分:0)

花了一段时间,但这很有效。我把模型改为:

class Fetch < ActiveRecord::Base
API_URI = 'http://blog.url.com/rss.xml'.freeze

def self.fetch_blog_posts(posts)
 posts = Rails.cache.fetch(API_URI, expires_in: 10.minutes) do
  begin
    feed = Feedjira::Feed.fetch_and_parse API_URI
    feed.entries.take(2)
  rescue
    []
  end
end
posts
end

end

然后将视图更新为:

<% Fetch.fetch_blog_posts(2).each do |post| %>
                    <div class="home-blog-post">
                        <div class="news-date">

                            <%= post.published.strftime("%b %d, %Y") %>
                        </div>
                        <%= link_to post.title, post.url, class: 'news-title' %>