2017-11-01 9 views
0

私はランディングページを動的にしたいので、ユーザーが移動するたびに変更するようなレールアプリがあります。レールで動的ルートルートを作成する

私のアプリにはカフェがあり、各カフェにはそれぞれのショーページがあります。私は各ショーページを動的にしたい。 URLはカフェのIDに基づいているので、探している動的作業を作成するための焦点としてこれらのIDを使用しなければならないと思いました。私は私のルートで

class CafesController < ApplicationController 
    def root 
    array = Cafe.pluck(:id) 

    array.sample 
    end 
end 

を持って、私のカフェのコントローラーで

は私が

root 'cafes#root' 

を持っているファイル私は取得していますエラーが

`CafesController#root is missing a template for this request format and variant. ` 

誰もが私が知っているだろうですこれで行方不明?とても有難い。あなたが何か行うことができ

+0

エラーメッセージは、 'CafesController#1 root'ために対応するテンプレートが欠落していることを述べています。 'app/views/cafes/root.html.erb'ビューを設定して、' rails'がレンダリングするようにしてください。 – Dharam

答えて

1

Iの画像:ところで

class CafeController < ApplicationController 
    def root 
    redirect_to Cafe.all.sample 
    end 
end 

は、このアプローチは、あなたが維持し、従来の方法で、すべての通常のルートを使用させることの利点を持っています。

また、このアクションを少しわかりやすいものにすることも考えられます。おそらくrandom_cafeのようなものでしょう。 IMO、root 'cafes#random_cafe'はもう少し理解できます。あなたがレンダリングするテンプレートを指定する必要があるため

+1

私はこのアイデアが本当に好きです。私がやろうとしていることについてはかなりうまくいきます。どうもありがとうございます! – kdweber89

0

missing a template errorは、私がarray.sampleは、あなたがこのredirect_to :template => array.sampleようにそれを使用できるようにfirstsampe.html.erb内部カフェビューフォルダを持続/cafes/firstsampe.html.erbのようなものを返すことを想像しています。

希望します。

+0

テンプレートをレンダリングする方法を見てください(https://stackoverflow.com/questions/5045222/difference-between-render-action-and-render-template) –

0

私はあなたのデータがどのように見えるかについてどんな考えを持っていないが、あなたはここに取ることができる2つの方法があります。

  1. は、ユーザーが自分のホーム・ページ(ルート)
  2. に当たったときに、ランダムなカフェを表示

    コントローラ:彼らはシナリオ1では、ホームページ

を打ったとき

  • ランダムカフェのページにユーザーをリダイレクトします:

    class CafesController < ApplicationController 
        def index 
        @cafe = Cafe.order("RANDOM()").first 
        end 
    end 
    

    ルーティング:

    root 'cafes#index' 
    

    ビュー:シナリオ2では

    app/views/cafes/index.html.erb 
    
    <p><%= @cafe.name %></p> 
    

    コントローラー:

    class CafesController < ApplicationController 
        def index 
        redirect_to cafe_path(Cafe.order("RANDOM()").first) 
        end 
    
        def show 
        @cafe = Cafe.find(params[:id]) 
        end 
    end 
    

    ルーティング:

    root 'cafes#index' 
    resources :cafes, only: [:show] 
    

    再生回数:

    app/views/cafes/show.html.erb 
    
    <p><%= @cafe.name %></p> 
    
  • 関連する問題