Add announcement model
This commit is contained in:
parent
62602940ed
commit
4807066c68
|
@ -0,0 +1,85 @@
|
||||||
|
class AnnouncementsController < ApplicationController
|
||||||
|
# GET /announcements
|
||||||
|
# GET /announcements.xml
|
||||||
|
def index
|
||||||
|
@announcements = Announcement.all
|
||||||
|
|
||||||
|
respond_to do |format|
|
||||||
|
format.html # index.html.erb
|
||||||
|
format.xml { render :xml => @announcements }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# GET /announcements/1
|
||||||
|
# GET /announcements/1.xml
|
||||||
|
def show
|
||||||
|
@announcement = Announcement.find(params[:id])
|
||||||
|
|
||||||
|
respond_to do |format|
|
||||||
|
format.html # show.html.erb
|
||||||
|
format.xml { render :xml => @announcement }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# GET /announcements/new
|
||||||
|
# GET /announcements/new.xml
|
||||||
|
def new
|
||||||
|
@announcement = Announcement.new
|
||||||
|
|
||||||
|
respond_to do |format|
|
||||||
|
format.html # new.html.erb
|
||||||
|
format.xml { render :xml => @announcement }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# GET /announcements/1/edit
|
||||||
|
def edit
|
||||||
|
@announcement = Announcement.find(params[:id])
|
||||||
|
end
|
||||||
|
|
||||||
|
# POST /announcements
|
||||||
|
# POST /announcements.xml
|
||||||
|
def create
|
||||||
|
@announcement = Announcement.new(params[:announcement])
|
||||||
|
|
||||||
|
respond_to do |format|
|
||||||
|
if @announcement.save
|
||||||
|
flash[:notice] = 'Announcement was successfully created.'
|
||||||
|
format.html { redirect_to(@announcement) }
|
||||||
|
format.xml { render :xml => @announcement, :status => :created, :location => @announcement }
|
||||||
|
else
|
||||||
|
format.html { render :action => "new" }
|
||||||
|
format.xml { render :xml => @announcement.errors, :status => :unprocessable_entity }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# PUT /announcements/1
|
||||||
|
# PUT /announcements/1.xml
|
||||||
|
def update
|
||||||
|
@announcement = Announcement.find(params[:id])
|
||||||
|
|
||||||
|
respond_to do |format|
|
||||||
|
if @announcement.update_attributes(params[:announcement])
|
||||||
|
flash[:notice] = 'Announcement was successfully updated.'
|
||||||
|
format.html { redirect_to(@announcement) }
|
||||||
|
format.xml { head :ok }
|
||||||
|
else
|
||||||
|
format.html { render :action => "edit" }
|
||||||
|
format.xml { render :xml => @announcement.errors, :status => :unprocessable_entity }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# DELETE /announcements/1
|
||||||
|
# DELETE /announcements/1.xml
|
||||||
|
def destroy
|
||||||
|
@announcement = Announcement.find(params[:id])
|
||||||
|
@announcement.destroy
|
||||||
|
|
||||||
|
respond_to do |format|
|
||||||
|
format.html { redirect_to(announcements_url) }
|
||||||
|
format.xml { head :ok }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -5,8 +5,11 @@ class PagesController < ApplicationController
|
||||||
def show
|
def show
|
||||||
@page = Page.find(:first, :conditions => { :name => params[:page_name], :is_published => true })
|
@page = Page.find(:first, :conditions => { :name => params[:page_name], :is_published => true })
|
||||||
|
|
||||||
if @page && @page.external_link
|
if @page && !@page.external_link.blank?
|
||||||
redirect_to @page.external_link
|
redirect_to @page.external_link
|
||||||
|
elsif @page && @page.use_engine
|
||||||
|
#model_class = Kernel.const_get( "Announcement" ) # page.use_engine
|
||||||
|
redirect_to announcements_path
|
||||||
elsif @page
|
elsif @page
|
||||||
@layout = @page.layout
|
@layout = @page.layout
|
||||||
@page_content = Liquid::Template.parse(@page.content).render
|
@page_content = Liquid::Template.parse(@page.content).render
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
module AnnouncementsHelper
|
||||||
|
end
|
|
@ -0,0 +1,16 @@
|
||||||
|
class Announcement < CouchFoo::Base
|
||||||
|
|
||||||
|
property :title, String
|
||||||
|
property :content, String
|
||||||
|
|
||||||
|
validates_presence_of :title
|
||||||
|
|
||||||
|
def self.load
|
||||||
|
# hmm.... but one module will has many pages
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_liquid
|
||||||
|
{ :title => self.title, :content => self.content }
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
|
@ -5,7 +5,7 @@ class Page < CouchFoo::Base
|
||||||
property :content, String
|
property :content, String
|
||||||
property :layout_id, String
|
property :layout_id, String
|
||||||
property :layout_name, String
|
property :layout_name, String
|
||||||
property :load_model, String
|
property :use_engine, String
|
||||||
property :external_link, String
|
property :external_link, String
|
||||||
property :position, Integer
|
property :position, Integer
|
||||||
property :is_published, Boolean
|
property :is_published, Boolean
|
||||||
|
|
|
@ -21,4 +21,9 @@
|
||||||
<p>
|
<p>
|
||||||
<%= f.label :external_link, "External Link" %>
|
<%= f.label :external_link, "External Link" %>
|
||||||
<%= f.text_field :external_link %>
|
<%= f.text_field :external_link %>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<%= f.label :use_engine, "Use Engine" %>
|
||||||
|
<%= f.text_field :use_engine %>
|
||||||
|
<p>
|
|
@ -0,0 +1,22 @@
|
||||||
|
<h1>Editing announcement</h1>
|
||||||
|
|
||||||
|
<% form_for(@announcement) do |f| %>
|
||||||
|
<%= f.error_messages %>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<%= f.label :title, "Title" %>
|
||||||
|
<%= f.text_field :title %>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<%= f.label :content, "Content" %>
|
||||||
|
<%= f.text_area :content %>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<%= f.submit 'Update' %>
|
||||||
|
</p>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<%= link_to 'Show', @announcement %> |
|
||||||
|
<%= link_to 'Back', announcements_path %>
|
|
@ -0,0 +1,18 @@
|
||||||
|
<h1>Listing announcements</h1>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<% @announcements.each do |announcement| %>
|
||||||
|
<tr>
|
||||||
|
<td><%= link_to 'Show', announcement %></td>
|
||||||
|
<td><%= link_to 'Edit', edit_announcement_path(announcement) %></td>
|
||||||
|
<td><%= link_to 'Destroy', announcement, :confirm => 'Are you sure?', :method => :delete %></td>
|
||||||
|
</tr>
|
||||||
|
<% end %>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<%= link_to 'New announcement', new_announcement_path %>
|
|
@ -0,0 +1,21 @@
|
||||||
|
<h1>New announcement</h1>
|
||||||
|
|
||||||
|
<% form_for(@announcement) do |f| %>
|
||||||
|
<%= f.error_messages %>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<%= f.label :title, "Title" %>
|
||||||
|
<%= f.text_field :title %>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<%= f.label :content, "Content" %>
|
||||||
|
<%= f.text_area :content %>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<%= f.submit 'Create' %>
|
||||||
|
</p>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<%= link_to 'Back', announcements_path %>
|
|
@ -0,0 +1,3 @@
|
||||||
|
|
||||||
|
<%= link_to 'Edit', edit_announcement_path(@announcement) %> |
|
||||||
|
<%= link_to 'Back', announcements_path %>
|
|
@ -1,4 +1,8 @@
|
||||||
ActionController::Routing::Routes.draw do |map|
|
ActionController::Routing::Routes.draw do |map|
|
||||||
|
map.resources :announcements
|
||||||
|
|
||||||
|
|
||||||
|
map.resources :announcements
|
||||||
|
|
||||||
map.namespace :admin do |admin|
|
map.namespace :admin do |admin|
|
||||||
admin.resources :pages
|
admin.resources :pages
|
||||||
|
|
|
@ -1,275 +0,0 @@
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
|
|
||||||
<title>Ruby on Rails: Welcome aboard</title>
|
|
||||||
<style type="text/css" media="screen">
|
|
||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
margin-bottom: 25px;
|
|
||||||
padding: 0;
|
|
||||||
background-color: #f0f0f0;
|
|
||||||
font-family: "Lucida Grande", "Bitstream Vera Sans", "Verdana";
|
|
||||||
font-size: 13px;
|
|
||||||
color: #333;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
font-size: 28px;
|
|
||||||
color: #000;
|
|
||||||
}
|
|
||||||
|
|
||||||
a {color: #03c}
|
|
||||||
a:hover {
|
|
||||||
background-color: #03c;
|
|
||||||
color: white;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#page {
|
|
||||||
background-color: #f0f0f0;
|
|
||||||
width: 750px;
|
|
||||||
margin: 0;
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
#content {
|
|
||||||
float: left;
|
|
||||||
background-color: white;
|
|
||||||
border: 3px solid #aaa;
|
|
||||||
border-top: none;
|
|
||||||
padding: 25px;
|
|
||||||
width: 500px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#sidebar {
|
|
||||||
float: right;
|
|
||||||
width: 175px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#footer {
|
|
||||||
clear: both;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#header, #about, #getting-started {
|
|
||||||
padding-left: 75px;
|
|
||||||
padding-right: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#header {
|
|
||||||
background-image: url("images/rails.png");
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
background-position: top left;
|
|
||||||
height: 64px;
|
|
||||||
}
|
|
||||||
#header h1, #header h2 {margin: 0}
|
|
||||||
#header h2 {
|
|
||||||
color: #888;
|
|
||||||
font-weight: normal;
|
|
||||||
font-size: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#about h3 {
|
|
||||||
margin: 0;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#about-content {
|
|
||||||
background-color: #ffd;
|
|
||||||
border: 1px solid #fc0;
|
|
||||||
margin-left: -11px;
|
|
||||||
}
|
|
||||||
#about-content table {
|
|
||||||
margin-top: 10px;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
font-size: 11px;
|
|
||||||
border-collapse: collapse;
|
|
||||||
}
|
|
||||||
#about-content td {
|
|
||||||
padding: 10px;
|
|
||||||
padding-top: 3px;
|
|
||||||
padding-bottom: 3px;
|
|
||||||
}
|
|
||||||
#about-content td.name {color: #555}
|
|
||||||
#about-content td.value {color: #000}
|
|
||||||
|
|
||||||
#about-content.failure {
|
|
||||||
background-color: #fcc;
|
|
||||||
border: 1px solid #f00;
|
|
||||||
}
|
|
||||||
#about-content.failure p {
|
|
||||||
margin: 0;
|
|
||||||
padding: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#getting-started {
|
|
||||||
border-top: 1px solid #ccc;
|
|
||||||
margin-top: 25px;
|
|
||||||
padding-top: 15px;
|
|
||||||
}
|
|
||||||
#getting-started h1 {
|
|
||||||
margin: 0;
|
|
||||||
font-size: 20px;
|
|
||||||
}
|
|
||||||
#getting-started h2 {
|
|
||||||
margin: 0;
|
|
||||||
font-size: 14px;
|
|
||||||
font-weight: normal;
|
|
||||||
color: #333;
|
|
||||||
margin-bottom: 25px;
|
|
||||||
}
|
|
||||||
#getting-started ol {
|
|
||||||
margin-left: 0;
|
|
||||||
padding-left: 0;
|
|
||||||
}
|
|
||||||
#getting-started li {
|
|
||||||
font-size: 18px;
|
|
||||||
color: #888;
|
|
||||||
margin-bottom: 25px;
|
|
||||||
}
|
|
||||||
#getting-started li h2 {
|
|
||||||
margin: 0;
|
|
||||||
font-weight: normal;
|
|
||||||
font-size: 18px;
|
|
||||||
color: #333;
|
|
||||||
}
|
|
||||||
#getting-started li p {
|
|
||||||
color: #555;
|
|
||||||
font-size: 13px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#search {
|
|
||||||
margin: 0;
|
|
||||||
padding-top: 10px;
|
|
||||||
padding-bottom: 10px;
|
|
||||||
font-size: 11px;
|
|
||||||
}
|
|
||||||
#search input {
|
|
||||||
font-size: 11px;
|
|
||||||
margin: 2px;
|
|
||||||
}
|
|
||||||
#search-text {width: 170px}
|
|
||||||
|
|
||||||
|
|
||||||
#sidebar ul {
|
|
||||||
margin-left: 0;
|
|
||||||
padding-left: 0;
|
|
||||||
}
|
|
||||||
#sidebar ul h3 {
|
|
||||||
margin-top: 25px;
|
|
||||||
font-size: 16px;
|
|
||||||
padding-bottom: 10px;
|
|
||||||
border-bottom: 1px solid #ccc;
|
|
||||||
}
|
|
||||||
#sidebar li {
|
|
||||||
list-style-type: none;
|
|
||||||
}
|
|
||||||
#sidebar ul.links li {
|
|
||||||
margin-bottom: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<script type="text/javascript" src="javascripts/prototype.js"></script>
|
|
||||||
<script type="text/javascript" src="javascripts/effects.js"></script>
|
|
||||||
<script type="text/javascript">
|
|
||||||
function about() {
|
|
||||||
if (Element.empty('about-content')) {
|
|
||||||
new Ajax.Updater('about-content', 'rails/info/properties', {
|
|
||||||
method: 'get',
|
|
||||||
onFailure: function() {Element.classNames('about-content').add('failure')},
|
|
||||||
onComplete: function() {new Effect.BlindDown('about-content', {duration: 0.25})}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
new Effect[Element.visible('about-content') ?
|
|
||||||
'BlindUp' : 'BlindDown']('about-content', {duration: 0.25});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
window.onload = function() {
|
|
||||||
$('search-text').value = '';
|
|
||||||
$('search').onsubmit = function() {
|
|
||||||
$('search-text').value = 'site:rubyonrails.org ' + $F('search-text');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="page">
|
|
||||||
<div id="sidebar">
|
|
||||||
<ul id="sidebar-items">
|
|
||||||
<li>
|
|
||||||
<form id="search" action="http://www.google.com/search" method="get">
|
|
||||||
<input type="hidden" name="hl" value="en" />
|
|
||||||
<input type="text" id="search-text" name="q" value="site:rubyonrails.org " />
|
|
||||||
<input type="submit" value="Search" /> the Rails site
|
|
||||||
</form>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li>
|
|
||||||
<h3>Join the community</h3>
|
|
||||||
<ul class="links">
|
|
||||||
<li><a href="http://www.rubyonrails.org/">Ruby on Rails</a></li>
|
|
||||||
<li><a href="http://weblog.rubyonrails.org/">Official weblog</a></li>
|
|
||||||
<li><a href="http://wiki.rubyonrails.org/">Wiki</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li>
|
|
||||||
<h3>Browse the documentation</h3>
|
|
||||||
<ul class="links">
|
|
||||||
<li><a href="http://api.rubyonrails.org/">Rails API</a></li>
|
|
||||||
<li><a href="http://stdlib.rubyonrails.org/">Ruby standard library</a></li>
|
|
||||||
<li><a href="http://corelib.rubyonrails.org/">Ruby core</a></li>
|
|
||||||
<li><a href="http://guides.rubyonrails.org/">Rails Guides</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="content">
|
|
||||||
<div id="header">
|
|
||||||
<h1>Welcome aboard</h1>
|
|
||||||
<h2>You’re riding Ruby on Rails!</h2>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="about">
|
|
||||||
<h3><a href="rails/info/properties" onclick="about(); return false">About your application’s environment</a></h3>
|
|
||||||
<div id="about-content" style="display: none"></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="getting-started">
|
|
||||||
<h1>Getting started</h1>
|
|
||||||
<h2>Here’s how to get rolling:</h2>
|
|
||||||
|
|
||||||
<ol>
|
|
||||||
<li>
|
|
||||||
<h2>Use <tt>script/generate</tt> to create your models and controllers</h2>
|
|
||||||
<p>To see all available options, run it without parameters.</p>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li>
|
|
||||||
<h2>Set up a default route and remove or rename this file</h2>
|
|
||||||
<p>Routes are set up in config/routes.rb.</p>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li>
|
|
||||||
<h2>Create your database</h2>
|
|
||||||
<p>Run <tt>rake db:migrate</tt> to create your database. If you're not using SQLite (the default), edit <tt>config/database.yml</tt> with your username and password.</p>
|
|
||||||
</li>
|
|
||||||
</ol>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="footer"> </div>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
Reference in New Issue