制作一个非常简单的CMS

时间:2014-08-16 09:51:32

标签: ruby-on-rails

我制作了一个非常简单的带有rails的CMS,只需更改现有页面上的现有文本和图像,别无其他。没有改变布局或任何疯狂的事情。

它有点像wordpress。以下是它的工作方式:

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

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

我已经开始了,有一件事让我感觉到填充页面的所有逻辑。可编辑区域出现在视图中:

飞溅/ 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实例变量?或者我正在做得好吗?

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

1 个答案:

答案 0 :(得分:0)

<强> DRY

看起来您最好使用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" %>

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