如何使用Refinery博客在主页上输出帖子

时间:2015-07-17 16:53:36

标签: ruby-on-rails ruby refinerycms

我正在使用Refinery与Refinery博客。当我尝试在主页上发布帖子时发布错误

  

未定义的方法`任何?'为零:NilClas

我认为这是因为不同的控制器。

这是我页面的代码

<div class="tab-content">
    <div class="tab-pane active" id="posts">
       <div class="panel-default">
          <div class="overflow-hidden nav nav-pills nav-stacked">



                                  <% if @posts.any? %>
                                    <section id="blog_posts">
                                      <%= render :partial => "/refinery/blog/shared/post", :collection => @posts %>
                                      <%= will_paginate @posts %>
                                    </section>
                                  <% else %>
                                    <p><%= t('.no_blog_articles_yet') %></p>
                                  <% end %>
                                <% end %>

                                <% content_for :side_body_prepend do -%>
                                  <%= raw @page.content_for(Refinery::Pages.default_parts.second.to_sym) %>
                                <% end if Refinery::Pages.default_parts.many? -%>
                                <%= render '/refinery/blog/shared/body_content_right' %>

                                <%= render "/refinery/content_page" %>
                                <% content_for :stylesheets, stylesheet_link_tag('refinery/blog/frontend') %>

                                                    </div>
                                                </div>
                                            </div>

这里是主页的控制器,所有其他人都期待博客。(我认为))))

module Refinery
   module Blog
    class BlogController < ::ApplicationController

      include ControllerHelper

      helper :'refinery/blog/posts'
      before_filter :find_page, :find_all_blog_categories

      protected

        def find_page
          @page = Refinery::Page.find_by(:link_url => Refinery::Blog.page_url)
        end
    end
     end
     class PagesController < ::ApplicationController
             include Pages::RenderOptions

    before_action :find_page, :set_canonical
    before_action :error_404, :unless => :current_user_can_view_page?

    # Save whole Page after delivery
    after_action :write_cache?

    # This action is usually accessed with the root path, normally '/'
    def home
      render_with_templates?
    end

    # This action can be accessed normally, or as nested pages.
    # Assuming a page named "mission" that is a child of "about",
    # you can access the pages with the following URLs:
    #
    #   GET /pages/about
    #   GET /about
    #
    #   GET /pages/mission
    #   GET /about/mission
    #
    def show
      if should_skip_to_first_child?
        redirect_to refinery.url_for(first_live_child.url) and return
      elsif page.link_url.present?
        redirect_to page.link_url and return
      elsif should_redirect_to_friendly_url?
        redirect_to refinery.url_for(page.url), :status => 301 and return
      end

      render_with_templates?
    end

  protected

    def requested_friendly_id
      if ::Refinery::Pages.scope_slug_by_parent
        # Pick out last path component, or id if present
        "#{params[:path]}/#{params[:id]}".split('/').last
      else
        # Remove leading and trailing slashes in path, but leave internal
        # ones for global slug scoping
        params[:path].to_s.gsub(%r{\A/+}, '').presence || params[:id]
      end
    end

    def should_skip_to_first_child?
      page.skip_to_first_child && first_live_child
    end

    def should_redirect_to_friendly_url?
      requested_friendly_id != page.friendly_id || ::Refinery::Pages.scope_slug_by_parent && params[:path].present? && params[:path].match(page.root.slug).nil?
    end

    def current_user_can_view_page?
      page.live? || current_refinery_user_can_access?("refinery_pages")
    end

    def current_refinery_user_can_access?(plugin)
      refinery_user? && current_refinery_user.authorized_plugins.include?(plugin)
    end

    def first_live_child
      page.children.order('lft ASC').live.first
    end

    def find_page(fallback_to_404 = true)
      @page ||= case action_name
                when "home"
                  Refinery::Page.where(:link_url => '/').first
                when "show"
                  Refinery::Page.find_by_path_or_id(params[:path], params[:id])
                end
      @page || (error_404 if fallback_to_404)
    end

    alias_method :page, :find_page

    def set_canonical
      @canonical = refinery.url_for @page.canonical if @page.present?
    end

    def write_cache?
      if Refinery::Pages.cache_pages_full && !refinery_user?
        cache_page(response.body, File.join('', 'refinery', 'cache', 'pages', request.path).to_s)
      end
    end
  end
end

这里是博客控制器

module Refinery
  module Blog
    class BlogController < ::ApplicationController

      include ControllerHelper

      helper :'refinery/blog/posts'
      before_filter :find_page, :find_all_blog_categories


      protected

        def find_page
          @page = Refinery::Page.find_by(:link_url => Refinery::Blog.page_url)
        end
    end
  end
end

1 个答案:

答案 0 :(得分:1)

看起来你因为缺少一些代码行而得到了这个。高于<% content_for :body do %> <%= raw @page.content_for(Refinery::Pages.default_parts.first.to_sym) if Refinery::Pages.default_parts.any? %>  你应该加上这个:

mousewheel

应该修复你的错误