显示另一个控制器的模板/布局

时间:2013-03-22 08:30:10

标签: ruby-on-rails ruby-on-rails-3

我有以下协会

 Group:
   has_many :group_links, :dependent => :destroy

 GroupLink:
    belongs_to :group

我想显示属于布局内特定组的所有组链接,其中包含从GroupLInks视图中看不到的其他对象。所以我想从GroupController渲染一个模板,如下所示:

     def group_links
          @group_links = @group.group_links.all
          render :template => 'group_links/group_links', :layout => 
                              '/layouts/sponsored_group_manage_sub_menu'
     end

但是我收到以下错误:

       The action 'index' could not be found for GroupLinksController

如果我创建了一个'索引'查看GroupLinks并尝试在包含其他对象的布局中显示它,它会抛出错误

      "You have a nil object"

我有以下方法在我的groupscontroller中初始化:

    def init_group
      @group = Group.find_by_id(params[:id])
      @group_blog_tags=@group.blog.blog_posts.tag_counts
      @booth_links = @group.group_links.all
      max_id = Group.count_by_sql("select min(profile_id) from (select profile_id from 
               group_memberships where group_id = #{@group.id} order by profile_id desc 
               limit 200) as x")
      @booth_members = @group.members.all(:conditions => "profiles.id >= #
      {rand(max_id)+1}", :limit => 20).to_a.sort! { |a,b| rand(3)-1 }
    redirect_to groups_explorations_path unless @group
   end

在组布局中使用这些其他对象来显示其他对象。问题是我能够从GroupsController中显示另一个对象,而不需要在该对象Controller中进行任何索引操作。我也为GroupLinks提供完全相同的设置,但在这种情况下它不起作用...请帮我解决这个问题?

2 个答案:

答案 0 :(得分:0)

我认为问题是你的控制器方法group_links中的@group是nil。 您可以尝试这样做:

def group_links
    @group = Group.find(params[:id])  
    @group_links = @group.group_links.all
    render :template => 'group_links/group_links', :layout => 
                      '/layouts/sponsored_group_manage_sub_menu'
end

但我不确定这是否会正常运作:

render :template => 'group_links/group_links', :layout => 
                      '/layouts/sponsored_group_manage_sub_menu'

您可以尝试将模板放在名为“group_links”的正确视图文件夹中,并在routes.rb文件中匹配。

答案 1 :(得分:0)

事实证明我没有在我的布局中放置这个方法的正确路径。路线很好,但是对这种方法的调用不是 - 我不得不打破我的想法:( ...感谢你的时间@Mosin和@RubyMan,欣赏它!