如何在Rails中动态添加页面链接

时间:2017-05-05 22:10:46

标签: ruby-on-rails ruby controller

我的网页控制器有以下代码:

class PagesController < ApplicationController

  def index
    @pages = Page.all
  end

  def new
    @page = Page.new
  end

  def edit
    @page = Page.find(params[:id])
  end

  def create
    @page = Page.new(page_params)
    @page.save
    redirect_to @page
  end

  def update
    @page = Page.find(params[:id])
    @page.update(page_params)
    redirect_to @page
  end

  def show
    @page = Page.find(params[:id])
  end

  def destroy
    @page = Page.find(params[:id])
    @page.destroy
    redirect_to pages_path
  end


  private
  def page_params
    params.require(:page).permit(:title,:description)
  end

end

在我的导航栏中,我有这段代码:

<% @pages.each do |page| %>
        <li?<%= link_to 'page.title', page_path(page)%></li>
    <% end %>

代码应该生成每个页面的标题,但是当我运行页面时出现以下错误:

undefined method `each' for nil:NilClass

我以为我已经通过在PagesController中的新函数中输入代码来消除了这个问题。此页面控制器仅用于其他页面。导航栏还包含指向静态页面的链接,因此导航栏中应始终有一些值。

有人有什么建议吗?

2 个答案:

答案 0 :(得分:0)

试试这个:

application_controller.rb

中添加此内容
@pages = Page.all

并在导航栏

<% @pages.each do |page| %>
  <li><%= link_to "#{page.title}", page_path(page)%></li>
<% end %>

答案 1 :(得分:-2)

听起来你的Page表中没有任何页面。确保已使用某些页面填充此表。

您还可以将代码包装在unless子句中,以检查@pages是否为零。

例如:

<% unless @pages.nil? %>
    <% @pages.each do |page| %>
       <li?<%= link_to 'page.title', page_path(page)%></li>
    <% end %>
<% end %>