【问题标题】:How to add links to pages dynamically in Rails如何在 Rails 中动态添加指向页面的链接
【发布时间】:2017-05-05 22:10:45
【问题描述】:

我的页面控制器有这个代码:

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 的新函数中输入代码已经消除了这个问题。此页面控制器仅用于附加页面。导航栏还包含指向静态页面的链接,因此导航栏中应该总是有一些价值。

有什么建议吗?

【问题讨论】:

  • 它适用于index,但不适用于show。或者,它永远不会起作用?
  • 它在导航栏以外的地方工作。我有一个单独的页面,用户可以在其中创建读取更新和销毁页面。此功能在此处有效,但在导航栏中无效
  • 导航栏抛出错误时调用的是什么控制器/动作?
  • 给出错误。没有添加页面时,方法 each 不定义

标签: ruby-on-rails ruby controller


【解决方案1】:

试试这个:

将此添加到您的 application_controller.rb

@pages = Page.all

在您的导航栏

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

【讨论】:

  • 谢谢!这炒锅。我没有将 @pages = Page.all 添加到 application_controller.rb 非常感谢
  • 这样做意味着每个 Web 请求都会将所有页面加载到内存中。正确的方法是在需要填充@pages 的控制器中将@pages 设置为before_filter(Rails 5 中的before_action)。
  • @scarver2 是的,但他需要将它放在那里,因为他希望所有页面都可用于出现在每个视图中的主导航栏。我不知道他为什么需要那个,但是是的,每次请求都将所有页面加载到内存中并不好。
【解决方案2】:

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

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

例如:

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

【讨论】:

    猜你喜欢
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多