2

RubyonRailsを手に入れ始めたところです。私はむしろそれが好きです、しかし私は障害にぶつかりました。私は問題を解決する2つの方法を知っていますが、これを行うための「レールウェイ」が何であるかについて興味があります。

セットアップ

プロジェクトの説明を一覧表示するインデックスページがあります。ユーザーがプロジェクトをクリックするshowと、プロジェクトコントローラーの機能が表示されます。リスト内のプロジェクトは、MySQLデータベースからロードされます。


私がやりたいこと

各「プロジェクトページ」にプロジェクト固有の情報をロードできるようにしたい。この情報は、ドキュメント、コード例などで構成されています。各ページには、同じ一般的なテンプレートがあります。


方法1

HTMLとテキストをMySQLデータベースの「Sections」テーブルに保存し、そのプロジェクトに関連するすべてのセクションをロードします。ページの下にある各セクションを表示します。


方法2(私がやりたい方法)

完全なドキュメントを使用して、プロジェクトごとに個別のビューを用意します。関数にロードされたプロジェクトに基づいて特定のビューをロードしshowます


コメントコメント

私がCodeIgniterを使用しているので、私が考えることに慣れていないRailsの3番目の方法はありますか?

私は「RailsWay」が何であるかに完全に適応する準備ができていますが、この種のものの適切な規則が何であるかはわかりません。

それとも、この問題は、あなたがそれをどのように行うかはまったく問題ではありませんか?

前もって感謝します。

4

2 に答える 2

1

これを行うには多くの方法がありますが、最も簡単な方法の1つは、デフォルトのテンプレートをオーバーライドすることです(render:actionは、ターゲットアクションのみのテンプレートではコードを実行しません)これはあなたの質問のWay2です。例:

def show
  @project = Project.find(params[:id])
  if @project.has_template?
    render :action => "show_#{@project.template_name}" and return
  end
  render :action => "show"
end 

この例では、ディレクトリapp / views / projectsには、デフォルトのプロジェクトの場合は「show.html.erb」、template_nameが「myspecialproject」のプロジェクトの場合は「show_myspecialproject.html.erb」などの名前の各プロジェクトのテンプレートが必要です。

Template_nameは、プロジェクトにそのようなものがあるか、デフォルトを使用する必要があるかを通知するメソッドです。このメソッドに任意のロジックを配置できます。追加の列IDテーブルにするか、template_nameをプロジェクト名と同じにするか、ファイルが存在するかどうかを確認するだけです。現在のディレクトリにあります。

コードが重複していてテンプレートをDRYのままにしておくため、show.html.erbを使用する場合は、部分的なテンプレートを使用することもできます。 http://rails.rubyonrails.org/classes/ActionView/Partials.html このように

コントローラのアクションはデフォルトです

def show
    @project = Project.find(params[:id])      
end 



in show.html.erb
<h1><%= @project.name %></h1>
<%= render @project.tamplate_name %>

この例では、すべての部分テンプレートは「_」で始まる必要があります。:"_ myspecialproject.html.erb"

于 2012-04-26T08:24:13.577 に答える
1

各プロジェクトに同じ一般的なテンプレートがある場合、異なるビューを持つことの価値はわかりません。

サイズを試してみることをお勧めします。

ドキュメントやコード例などをセクションテーブルに保存したり、各タイプを独自のテーブルに保存したりできます。セクションテーブルにそれらがある場合は、タイプフィールドを含め、タイプごとに異なるクラスを使用します。DocumentationとCodeExampleがそのような2つのクラスであるとしましょう。

:conditionsオプションを使用して、タイプごとにProjectクラスでhas_oneを定義します。

class Project < ActiveRecord::Base
  has_one :documentation, :conditions => { :type => "Documentation" }
  has_one :code_example, :conditions => { :type => "CodeExample" }
end

class Documentation < ActiveRecord::Base
  set_table_name "sections"
  belongs_to :project
end

プロジェクトの表示ページを整理してセクションを含める場合は、セクションタイプごとにパーシャルを呼び出すことができます。

プロジェクトの表示ページにリンクまたはタブを含める場合(リンクまたはCSS形式のボタンを使用してページにタブを実装できます)、セクションタイプのコントローラーで表示アクションに移動します。これにネストされたルートを使用することは、使用したいアイデアかもしれません。

resources :projects do
  resource :documentation
  resource :code_example
end

これらはいくつかのアイデアです。あなたがそれをすべてこのようにしたくないのであれば、あなたは私の考えからあなたが望むものをとるかもしれません。

于 2012-04-26T12:43:49.103 に答える