-1

私のモデルは次のとおりです。

class Country < ActiveRecord::Base
    extend FriendlyId
    friendly_id :name, use: :slugged
    has_many :regions

end

class Region < ActiveRecord::Base
    belongs_to :country
end

ルートの一部

resources :countries, :path => ''
 resources :countries, :path => '', :only => [] do
  resources :regions, :path => ''
    resources :regions, :path => '', :only => [] do
     resources :houses do
  collection do
    get 'tags/:tag', to: 'houses#index', as: :tag
    end
  end

リージョンコントローラー:

def show
    @country = Country.find(params[:country_id])
    @region = Region.find(params[:id])
end

メインナビゲーション:

 %ul.nav
        %li
          = link_to "home", root_path
        %li.dropdown
          %a.dropdown-toggle{"data-toggle" => "dropdown", :href => "/nl"}
            = t('navigation.nav.houses')
            = @region.name

メイン ナビゲーションのリージョン名 (@region.name) は、コントローラー変数によって入力されます。これは正常に動作します..だから、地域ごとに素敵な「カスタム」メインナビゲーションを取得します。しかし今、私は国別のパスも行いたい...だから、訪問者が /locale/italy の名前で「イタリア」をメインナビゲーションに表示すると、どうすればこれを行うことができますか?ビューレイヤーの条件?

メイン ナビゲーションでは、変数 @region.name は、コントローラー ロジックに基づいて正しいリージョン名を示します。しかし、訪問者が国のページにいる場合、どのように対処しますか? メインのナビゲーション コードは @region.name です。

ありがとう..レムコ

4

1 に答える 1

0
# app/helpers/region_helper.rb
module RegionHelper

  def region_name
    return session[:region] if session[:region].present?
    @region ||= Region.find('however you find')
    @region.name
  end

end

また

# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base

  before_filter :prepare_region

  protected

  def prepare_region
    @region_name = session[:region] || Region.find('however you find')
    session[:region] = @region_name
  end

end

次に、ビューで、2 番目の例を変更する場合は、region_nameまたは@region_nameまたはのいずれかを使用します。@region.name自分に合っていると思われるコードを組み合わせて使用​​してください。

于 2013-02-17T21:32:48.073 に答える