【问题标题】:Make a very simple CMS制作一个非常简单的 CMS
【发布时间】:2014-08-16 09:51:32
【问题描述】:

我正在制作一个非常简单的 CMS,它只更改现有页面上的现有文本和图像,仅此而已。没有改变布局或任何类似的疯狂。

有点像wordpress。以下是它的工作原理:

  • 如果管理员登录,他们的顶部会有一个特殊栏 页面,这将使他们能够编辑页面。
  • 点击后,他们会转到控制面板,以及所有可编辑的可视区域。
  • 然后他们可以在控制面板中编辑页面并保存。

组织这个流程的好方法是什么?

我已经开始了,让我感动的一件事是,所有填充页面可编辑区域的逻辑都发生在视图中:

splash/welcome.html.erb

<% @page = Page.find(name: 'welcome') %>
<% regions = @page.text_regions %>

<h1> <%= regions.where(name: 'title').text %> </h1> This returns the title (Welcome to my website)
<%= regions.where(name: 'welcometext').text %> This returns welcome text (This is my website bla bla)

我工作得很好,尽管数据库最初必须使用空白区域作为种子。

但是,我不喜欢视图中的逻辑,那么如何在应用程序控制器中填充 @regions 实例变量?还是我做得很好?

也许将来我希望用户能够创建页面,这意味着我将无法在视图中包含此逻辑。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    干燥

    看起来你最好使用action_name(也许有一个助手)

    在不知道您要执行的操作的结构的情况下,这只是推测,但您可能会更好地执行以下操作:

    #app/models/region.rb
    Class Region < ActiveRecord::Base
       scope :title,        -> { find_by name: "title" }
       scope :welcome_text, -> { find_by name: "welcometext" }
    end
    
    #app/controllers/application_controller.rb
    Class ApplicationController < ActionController::Base
       before_action :set_page
    
       private
    
       def set_page
           @page = Page.find_by name: action_name
           @regions = @page.text_regions
       end
    end
    
    #app/views/shared/_regions.html.erb
    <h1><%= @regions.title.text %></h1>
    <%= @regions.welcome_text %>
    
    #app/views/static/welcome.html.erb
    <%= render "shared/regions" %>
    

    希望这会给您一些关于如何实现您想要的想法?

    【讨论】:

    • 参见文档:所有范围方法都将返回一个 ActiveRecord::Relation 对象,该对象将允许在其上调用进一步的方法(例如其他范围)。 find_by return Object or nil: Try to "Region.title.welcome_text" 不行。
    • 理想情况下,title 和 welcome_text 应该是与页面上的 lambda 范围的关系
    • @RichPeck "find_by_name(blah) 已被弃用,取而代之的是 "where(name: blah).first" 这就是为什么 Rails 4 需要 deprecated_finders gem 如果你保留它们guides.rubyonrails.org/4_0_release_notes.html
    • 戴夫,感谢您的更新! find_by 在 Rails 文档中仍然非常重要 - apidock.com/rails/v4.0.2/ActiveRecord/FinderMethods/find_by - find_by_x 已被贬值,是的:)
    猜你喜欢
    • 2011-01-25
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 2017-10-31
    相关资源
    最近更新 更多