Pertanyaan Halaman statis di Ruby on Rails


Apa cara standar membuat aplikasi Ruby on Rails yang akan memiliki halaman seperti

  • Rumah
  • Tentang
  • Kontak

Saya akan appricate jika seseorang memiliki link atau jawaban daripada hanya mengatakan menggunakan permata karena saya ingin belajar bagaimana membuat webapps sederhana dengan perilaku seperti itu.


75
2017-12-18 17:41


asal


Jawaban:


Tergantung pada bagaimana Anda ingin menangani konten di halaman tersebut.

Pendekatan # 1 - menyimpan konten dalam tampilan

Jika Anda hanya ingin menempatkan semua konten Anda dalam tampilan ERB, maka pendekatan yang sangat sederhana adalah membuat a PagesController yang tujuannya adalah untuk menangani halaman statis. Setiap halaman diwakili oleh satu tindakan di controller.

pages_controller.rb:

class PagesController < ApplicationController
  def home
  end

  def about
  end

  def contact
  end
end

routes.rb:

match '/home' => 'pages#home'
match '/about' => 'pages#about'
match '/contact' => 'pages#contact'

Kemudian buat tampilan home.html.erb, about.html.erb, dan contact.html.erb di bawah app / views / pages. Tampilan ini berisi konten apa pun yang Anda inginkan di halaman statis Anda. Secara default mereka akan menggunakan aplikasi Anda.html.erb tata letak.

Anda juga ingin melihatnya halaman caching untuk memberi dorongan pada kinerja.


Pendekatan # 2 - menyimpan konten dalam basis data

Pendekatan lain yang saya gunakan adalah membuat CMS sangat dasar untuk halaman statis. Dalam hal ini, halaman diwakili dalam model. Ini menggunakan permata friendly_id untuk menangani siput untuk setiap laman sehingga dapat diambil dengan nama cantik di URL (mis., / tentang) alih-alih oleh ID.

page.rb:

class Page < ActiveRecord::Base
  attr_accessible :title, :content

  validates_presence_of :title, :content

  has_friendly_id :title, :use_slug => true, :approximate_ascii => true
end

pages_controller.rb:

class PagesController < ApplicationController
  def show
    @page = Page.find(params[:id])
    render 'shared/404', :status => 404 if @page.nil?
  end
end

show.html.erb:

<%= raw @page.content %>

routes.rb:

match '/:id' => 'pages#show'

Catatan: masukkan entri ini di ujung routes.rb karena cocok dengan semuanya.

Lalu bagaimana Anda ingin membuat, mengedit dan memperbarui halaman terserah Anda - Anda dapat memiliki antarmuka admin, atau membangunnya ke antarmuka publik Anda, entah bagaimana. Pendekatan ini dapat mengambil manfaat dari halaman caching juga.


112
2017-12-18 17:50



Pilihan lainnya adalah high_voltage permata: https://github.com/thoughtbot/high_voltage

Ini membuatnya sangat mudah untuk membuat halaman statis di mana konten disimpan dalam tampilan.


24
2017-11-10 22:27



Pendekatan Jeff # 1 (menyimpan konten dalam tampilan dan memiliki rute dan tindakan pengontrol untuk setiap halaman statis) adalah yang bagus. Satu-satunya hal yang akan saya tambahkan adalah menggunakan controller makro di rute Anda.

Jadi, daripada ini:

match '/home' => 'pages#home'
match '/about' => 'pages#about'
match '/contact' => 'pages#contact'

Kamu bisa melakukan ini:

controller :pages do
  get :home
  get :about
  get :contact
end

Ini dua baris tambahan, namun jauh lebih elegan, karena menghilangkan pengulangan dan mengelompokkan rute laman statis Anda secara visual.

Ia juga menggunakan get Metode kata kerja http bukan match, yang merupakan praktik yang lebih baik untuk rute Rails (dan lebih ringkas, sekarang Rails 4 membutuhkan kata kerja http yang akan ditentukan saat menggunakan match.


14
2018-06-27 03:52



Jeff's Approach # 1 sangat cocok untuk saya. Berikut ini adalah trik untuk membuat pengontrol melihat halaman secara dinamis. Dengan ini, Anda tidak perlu menyentuh controller atau routes.rb untuk menambahkan halaman. Hanya drop halaman di bawah app / views / pages dan controller akan menemukannya.

class PagesController < ApplicationController
  def show
    render params[:id]
  end
end

6
2018-03-15 00:25



Lihat Michael Hartl http://railstutorial.org yang hadir dalam versi 2.3.8 dan 3.0.x. Ini mencakup ini dengan contoh-contoh hebat dan menuntun Anda melalui membangunnya sangat awal dan Anda juga akan memiliki kesempatan untuk belajar lebih banyak dari contoh ini. Saya sangat merekomendasikannya.


6
2017-12-18 20:39



config / routes.rb

get ':id', to: 'pages#show'

app / controllers / pages_controller.rb

class PagesController < ApplicationController
  def show
    begin
      render params[:id]
    rescue ActionView::MissingTemplate
      render :file => "#{Rails.root}/public/404", :layout => false, :status => :not_found
    end
  end
end

Kemudian tempatkan halaman statis Anda di app / views / pages / {name} .html.erb (atau format template apa pun.)


2
2017-08-08 23:04



Untuk lebih lanjut Anda dapat membuat halaman statis menggunakan Jekyll bootstrap atau juga Jekyll menggunakan blog Berbahaya

Merujuknya sangat membantu.


1
2017-10-22 10:08



Jawaban yang memadai untuk pertanyaan Anda pada dasarnya akan terlihat seperti pengantar kerangka Rails: struktur MVC, templating, dan routing DSL setidaknya. Jeff telah memberikan tusukan yang baik, tetapi jawabannya masih mengasumsikan banyak pengetahuan Rails dasar di pihak Anda.

Saya akan menyarankan meskipun, bahwa jika webapp Anda benar-benar sederhana itu, Rails mungkin berlebihan. Saya akan mencari sesuatu yang lebih ringan, seperti Sinatra, yang memiliki kurva belajar yang jauh lebih rendah daripada Rails dan melakukan pekerjaan yang hebat untuk hal semacam ini tanpa harus berurusan dengan perutean kompleks, pemetaan aksi / template MVC sihir, dll.


0
2017-12-18 18:03



Saya sarankan menambahkan halaman Anda di folder publik agar dapat dilayani secara langsung tanpa harus melewati rel sama sekali. Saya bukan ahli, jadi saya tidak yakin apakah ini bisa memiliki kontra jika halaman statis.


0
2017-07-16 07:29