我制作了一个非常简单的带有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
实例变量?或者我正在做得好吗?
将来我希望用户能够创建页面,这意味着我无法在视图中使用此逻辑。
答案 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" %>
希望这会给你一些关于如何实现你想要的想法?