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
 | 
			
		||||
    @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
 | 
			
		||||
    elsif @page && @page.use_engine
 | 
			
		||||
      #model_class = Kernel.const_get( "Announcement" ) # page.use_engine
 | 
			
		||||
      redirect_to announcements_path
 | 
			
		||||
    elsif @page
 | 
			
		||||
      @layout = @page.layout
 | 
			
		||||
      @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 :layout_id, String
 | 
			
		||||
   property :layout_name, String
 | 
			
		||||
   property :load_model, String
 | 
			
		||||
   property :use_engine, String
 | 
			
		||||
   property :external_link, String
 | 
			
		||||
   property :position, Integer
 | 
			
		||||
   property :is_published, Boolean
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,3 +22,8 @@
 | 
			
		|||
<%= f.label :external_link, "External Link" %>
 | 
			
		||||
<%= f.text_field :external_link %>
 | 
			
		||||
</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|
 | 
			
		||||
  map.resources :announcements
 | 
			
		||||
 | 
			
		||||
  
 | 
			
		||||
  map.resources :announcements
 | 
			
		||||
  
 | 
			
		||||
  map.namespace :admin do |admin|
 | 
			
		||||
    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>
 | 
			
		||||
		Loading…
	
		Reference in New Issue