0

RubyonRailsアプリの個々のページに個々のメタディスクリプションとタイトルを設定しようとしています。私が編集するタスクを与えられたのは、以前の開発者向けアプリでした。また、私はRailsとRubyを初めて使用します。

このアプリには、一部のページ(ミッションと免責事項)にcontrollers/pages_controller.rb固有の変数を設定できたが、pet_planningなどの他のページには設定できなかった場所があります。@descriptionX@title

class PagesController < ApplicationController
  def index
    @title = params[:page].humanize
    render params[:page]
  end

  def pet_planning
    @descriptionX = 'pet planning'
    @title = 'pet planning title'
    render :pet_planning
  end        

  def mission
    @title = 'Our Mission Statement'
    @descriptionX = 'Mission Description'
    render :mission
  end

  def disclaimer
    @title = 'Our Disclaimer'
    render :disclaimer
  end

end

render params[:page]迷子になっているところだと思います。私はこれが何をしているのか、またはそれをどのように使用するのかを100%確信していません。

@title@descriptionのを制御できる理由はわかりませんが、両方が同じディレクトリにある場合は制御できmissionません。そして、私はアプリの他のどこにも2つの違いを見つけることができないようです。pet_planningviews/views/pages/

また、ファイルに追加= @title = 'Pet Planning'してみました。/views/pages/pet_planning.html.hamlタイトルは変更されますが、ページのコンテンツの上部にも予期せず表示されます。

どんな助けでもいただければ幸いです。ありがとう。

4

2 に答える 2

1

Railsがユーザーからのリクエストをレンダリングするページに変換する方法を説明しているActionControllerガイドを読むことをお勧めします。

基本的に、たとえばリクエストを送信するとき

GET http://www.example.com/pages/?page=pet_planning

次に、Railsはルーターを使用してルーターをどのように処理するかを決定します(ルーティングガイドでこれについて詳しく説明されています)。/pagesルートがPagesController#indexアクションに一致するようにアプリが設定されていると思います。config/routes.rbファイルを確認しrake routesたり、ターミナルで入力して、ルートがどのように設定されているかを確認できます。

リクエストの疑問符の後のビットは「クエリ文字列」であり、Railsはこれをparamsハッシュに変換します。上記の例では、のようになります{:page => "pet_planning"}。あなたのindexアクションはそれを見て、レンダリングするページの名前を取得します-それが何をしているのかrender params[:page]です。

一部のページの変数を変更でき、他のページの変数を変更できない理由は、一部のページに独自のルートがあるためだと思います。たとえば、アクションを使用しますが、特定のページは、paramを使用してアクションを介し/pages/missionてアクセスします。PagesController#missionindexpage/pages/?page=pet_planning/pages/index.html?page=pet_planning

更新:既存のルート

match 'practice_areas/:page' => 'pages#index', :as => :pages

に分割される可能性があります

match 'practice_areas/pet_planning' => 'pages#pet_planning' :as => :pet_planning
# etc ...

これは、次のようなコントローラーに対応します

class PagesController < ApplicationController
  def pet_planning
    @title = "Pet planning!"
    @description = "Whatever..."
  end
end

あなたの提案は近いですが、ルート形式が"controller_name#action_name"であるため、このように見える複数のコントローラーが必要になります

class PetPlanningController < ApplicationController
  def index
    @title = "Pet planning!"
    @description = "..."
  end
end

app/views/pages/pet_planning.html.hamlビューをからに移動する必要がありますapp/views/pet_planning/index.html.haml。ですから、それはおそらくあなたが望むものではありません。

タイトルと説明をカスタマイズするだけで、すべてを別々のアクションに分割するよりも、問題に取り組むためのより良い方法があることに注意してください。たとえば、ページ名を対応する情報にマップするハッシュを使用できます。

class PagesController < ApplicationController
  PAGE_INFO = {
    "pet_planning" => ["Pet planning!", "Whatever..."],
    "other_page" => ["Title", "Description"],
    # ...
  }

  def index
    page_name = params[:page]
    @title, @description = PAGE_INFO[page_name]
    render page_name 
  end
end
于 2013-01-08T17:45:45.333 に答える
0

pet_planning、mission、およびdisclaimerのrender呼び出しはデフォルトの動作と同じように実行されるため、これらの呼び出しを削除できます。彼らは、指定されたファイル名のページを使用するようにrailsに指示しています。indexメソッドの場合、これはパラメータに基づいてページをレンダリングします。

タイトルと説明は、レイアウトで設定されている可能性があります。/views/layouts/application.html.hamlまたは/views/layouts/pages.html.hamlを確認します。

于 2013-01-08T17:02:45.750 に答える