代码之家  ›  专栏  ›  技术社区  ›  Johan

Ruby on Rails无数据库模型的简单页面

  •  3
  • Johan  · 技术社区  · 14 年前

    我是Ruby和Rails的初学者,所以这可能是一个简单的问题。

    我应该如何设置一个不需要拥有任何自己数据库表的简单页面?例如,在我的例子中,我有一个网站存储歌曲和艺术家。我只想要一个简单的帮助页面,没有智能,只有静态HTML。我还需要一个浏览页面,用户可以在其中选择是浏览艺术家还是歌曲。这个页面将没有任何数据库表,但是它将有一个来自a-z的链接列表,提供每个字母的文章数,因此它需要对它自己不拥有的表进行数据库交互。

    我应该创建控制器来帮助和浏览吗,还是它们也需要模型?使用Rails2,我应该使用哪些脚本/生成工具,我应该要求它们为我做什么?

    5 回复  |  直到 10 年前
        1
  •  5
  •   jvnill    14 年前

    我通常创建一个页面控制器来显示静态页面,比如about、faq或privacy。

    你要做的是通过使用

    script/generate controller pages
    

    然后在您的 config/routes.rb

    map.resources :pages, :only => :show
    

    在你的页面中控制器

    def show
      # filter the params[:id] here to allow only certain values like
      if params[:id].match /browse|help/
        render :partial => params[:id]
      else
        render :file => "/path/to/some/404_template", :status => 404
      end
    end
    

    然后你只需要在 app/views/pages/

    #in /app/views/pages/_help.html.erb
    
    <p>This is the help section</p>
    
        2
  •  2
  •   John Topley    14 年前

    我过去使用过下面所示的方法。在中设置命名路由 config/routes.rb :

    map.page ':page', :controller => 'pages', :action => 'show',
             :page => /browse|help/
    

    -注意, :page 参数被约束为某些值(URL /browse /help )有了此路由,您可以创建如下链接:

    <%= link_to 'Help', pages_path('help') %>
    

    最后创建一个控制器( app/controllers/pages_controller.rb ):

    class PagesController < ApplicationController
      def show
        render params[:page] # => renders /app/views/pages/<page>.html.erb
      end
    end
    

    你可以改变 show 方法,如果需要更大的灵活性。例如,您可能希望对不同的页面使用不同的布局。对于该场景,您可以根据传入的值对逻辑进行分支 页面 参数。

        3
  •  1
  •   Dmitry Maksimov    14 年前

    控制器和模型并不是很难在轨道上连接。这只是一个惯例。因此,您可以轻松地创建一个控制器,它不会与任何模型连接。

        4
  •  1
  •   edthix    14 年前

    如果它是纯静态的(如*.html),您可以将它添加到公共文件夹中。例如:

    公共/test.html 公共/hello.html 公共/about.html

        5
  •  1
  •   ZX12R    10 年前

    每个控制器不一定都有一个模型。这只是一个容易联系的惯例

    让我们考虑一下您要显示的页面是关于我们的

    添加控制器 关于ou us ou controller.rb 其中提到 惯例

    添加视图 关于_S/index.html.rb

    如果你想让视图不跟随任何布局,只需说

     render :layout => false
    

    在你的“关于”中。